-
属性
为类中字段手写Get方法和Set方法是很麻烦,所以程序帮我们自动的封装出这个两个方法。
//使用上面的操作会生成以下
public string Name
{
//get访问器,用来读取属性值
get
{
return name;
}
//set访问器,用来给属性赋值
set
{
name = value;
}
}
//注意:不具有set访问器的属性被视为只读属性.
注:旧版本vs会生成上面的,新版本的vs会生成一下面的
public string Address { get => address; set => address = value; }
//属性本质上就是Get和Set方法,只是在形式上不同;
数据类型
值类型和引用类型
- C# 中有两种类型:引用类型和值类型
- 值类型:在栈中分配空间,由系统自动分配。
- 引用类型:在堆中分配空间,由程序员用“new”来分配空间是
// 值类型,由系统自动在栈中分配空间
int a;
// 引用类型,需要用new关键字去在堆中分配空间
int[] myArray = new int[5];
}
注意:string 类型属于特殊的引用类型
值类型
在做赋值操作的时候,值类型和引用类型有很大的区别
值类型变量互相赋值之后,两变量做的任何操作都互不影响,因为他们在不同的空间操作,
值类型变量赋值又称为拷贝赋值
引用类型
引用类型互相赋值之后,他们共用同一个空间,相互影响,一个值改变,另外一个值也会发生改变。
方法参数
引用参数
//值类型参数想要达到引用类型参数的效果,需要用到引用参数。
//引用参数以ref修饰符声明。
public void Swap (ref int a, ref int b)
{
int c = a ;
a = b;
b = c;
}
=====================================================
MyTest mt = new MyTest();
int a = 10;b = 16;
mt.Swap(ref a,ref b);
注意:ref 修饰的变量在传递数前一定要有初始值
输出参数
//如果想要一个方法返回多个值,可以用输出参数来处理.
//输出参数由out关键字标识,既它与普通形参相比只多了个out修饰
例:==========================================================
public void Cal (int a,int b,out int x,out int y)
{
x = a - b ;
y = a + b ;
}
//注意:在方法中out修饰的参数必须先初始值才能用
===========================================================
MyTest mt = new MyTest();
int a = 10;b = 16;
int a1,b1;
mt.Swap( a, b,out a1,out b1);
//注意:out修饰的变量在传递前,可以没有初始值
数组参数
//如果形参表中包含了数组型参数,那么它必须在参数表中位于最后,而且必须是一维数组类型。
//另外,数组型参数不可能将params修饰符与ref和out修饰符组合起来使用。
例:========================================================================
class MyMath{
public void Sum(params int[] a)
{
int result = 0;
foreach(int x in a)
{
result += x;
}
Console.WriteLine("结果为:" + result);
}
}
===========================================================================
public static void Main(string[] args)
{
MyMath mymt = new MyMath();
//这里的算出个数是任意个,甚至可以为0个
mymt.Sum(1,2,3,4,5);
}
总结
-
参数的长度可变。长度可以为0。
-
只能使用一次,而且要放到最后。
-
后跟数组类型,不能跟ref、out一起搭配使用
C#中方法的参数有4种类型:
-
值参数:不附加任何修饰符 。
-
输出参数:以 out 修饰符声明,可返回一 个或多个值给调用者 。
-
引用参数:以 ref 修饰符声明 。
-
数组参数:以 params 修饰符声明 。