C#语言学习--基础部分(十一) --值类型和引用类型
Note:
null 任何引用类型的默认值
Nullable类型:一些值类型的变量赋值null,值类型不能直接赋值null,除非前面加个?
1.值类型及引用类型ConsoleDemo
namespace ParametersDemo
{
class WrappedInt
{
public int Number;
}
}
{
class WrappedInt
{
public int Number;
}
}
namespace ParametersDemo
{
class Pass
{
public static void Value(int param)
{
param = 42;
}
}
}
{
class Pass
{
public static void Value(int param)
{
param = 42;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ParametersDemo
{
class Program
{
static void DoWork()
{
int i = 0;
Console.WriteLine(i);
Pass.Value(i);
Console.WriteLine(i);
WrappedInt wi = new WrappedInt();
Console.WriteLine(wi.Number);
Reference(wi);
Console.WriteLine(wi.Number);
}
public static void Reference(WrappedInt param)
{
param.Number = 42;
}
static void Main(string[] args)
{
try
{
DoWork();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ParametersDemo
{
class Program
{
static void DoWork()
{
int i = 0;
Console.WriteLine(i);
Pass.Value(i);
Console.WriteLine(i);
WrappedInt wi = new WrappedInt();
Console.WriteLine(wi.Number);
Reference(wi);
Console.WriteLine(wi.Number);
}
public static void Reference(WrappedInt param)
{
param.Number = 42;
}
static void Main(string[] args)
{
try
{
DoWork();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
ref out关键字
namespace RefDemo
{
class Pass
{
public static void Value(int param)
{
param = 42;
}
public static void RefValue(ref int param) //引用类型的参数
{
param = 42;
}
public static void OutValue(out int param)
{
param = 42;
}
}
}
{
class Pass
{
public static void Value(int param)
{
param = 42;
}
public static void RefValue(ref int param) //引用类型的参数
{
param = 42;
}
public static void OutValue(out int param)
{
param = 42;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RefDemo
{
class Program
{
static void Main(string[] args)
{
int i=0; //i必须初始化
Pass.Value(i);
Console.WriteLine(i);
Pass.RefValue(ref i); //引用类型
Console.WriteLine(i);
int j; //不再需要初始化
Pass.OutValue(out j);
Console.WriteLine(j);
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RefDemo
{
class Program
{
static void Main(string[] args)
{
int i=0; //i必须初始化
Pass.Value(i);
Console.WriteLine(i);
Pass.RefValue(ref i); //引用类型
Console.WriteLine(i);
int j; //不再需要初始化
Pass.OutValue(out j);
Console.WriteLine(j);
}
}
}