C#程序构建基块
本文内容
成员
字段
方法
其他函数成员
表达式
语句
此C#系列教程的前一篇文章中介绍的类型是使用一下构建基块生成的:
成员,如属性、字段、方法和事件。
表达式
语句
成员
class的成员要么是静态成员,要么是实例成员。
静态成员属于类,而实例成员则属于对象(类实例)。
以下列表概述了类可以包含的成员类型。
常量:与类相关联的常量值
字段:与类关联的变量
方法:类可执行的操作
属性:与读取和写入类的已命名属性相关联的操作
索引器:与将类实例编入索引(像处理数组一样)相关联的操作
事件:类可以生成的通知
运算符:类支持的转换和表达式运算符
构造函数:初始化类实例或类本身所需的操作
类型:类声明的嵌套类型
终结器:永久放弃类的实例之前完成的操作
辅助功能
每个类成员都有关联的可访问性,用于控制能够访问成员的成员程序文本区域。
可访问性有六种可能的形式。
以下内容对访问修饰符进行了汇总。
public:访问不受限制。
private:访问仅限于此类。
protected:访问仅限于此类或派生自此类的类。
internal:仅可访问当前程序集(.exe或.dll).。
protected internal:仅可访问此类、从此类中派生的类,或者同一程序集中的类。
private protected:仅可访问此类或同一程序集中从此类中派生的类。
字段
字段是与类或类实例相关联的变量。
使用静态修饰符声明的字段定义的是静态字段。
静态字段只指明一个存储位置。
无论创建多少个类实例,永远只有一个静态字段副本。
不使用静态修饰符声明的字段定义的是实例字段。
每个类实例均包含相应类的所有实例字段的单独副本。
在以下示例中,每个Color类实例均包含R、G和B实例字段的单独副本,但只包含Black、White、Red、Green和Blue静态字段的一个副本:
public class Color
{
public static readonly Color Black = new(0, 0, 0);
public static readonly Color White = new(255, 255, 255);
public static readonly Color Red = new(255, 0, 0);
public static readonly Color Green = new(0, 255, 0);
public static readonly Color Blue = new(0, 0, 255);
public byte R;
public byte G;
public byte B;
public Color(byte r, byte g, byte b)
{
R = r;
G = g;
B = b;
}
}
可以使用readonly修饰符声明只读字段。
只能在字段声明期间或在同一个类的构造函数中向只读字段赋值。
方法
方法时实现对象或类可执行的计算或操作的成员。
静态方法时通过类进行访问。
实例方法是通过类实例进行访问
方法可能也包含一个参数列表,这些参数表示传递给方法的值或变量引用。
方法具有返回类型,它用于指定方法计算和返回的值的类型。
如果方法未返回值,则它的返回类型为void。
方法可能也包含一组类型参数,必须在调用方法时指定类型自变量,这一点与类型一样。
与类型不同的是,通常可以根据方法调用的自变量推断出类型自变量,无需显示指定。
在声明方法的类中,方法的签名必须是唯一的。
方法签名包含方法名称、类型参数数量以及参数的数量、修饰符和类型。
方法签名不包含返回类型。
当方法主体是单个表达式时,可使用紧凑表达式格式定义方法,如下例中所示:
public override string ToString() => "This is an object";
参数
参数用于将值或变量引用传递给方法。
方法参数从调用方法时指定的自变量中获取其实际值。
有四类参数:值参数、引用参数、输出参数和参数数组。
值参数用于传递输入自变量。
值参数对于局部变量,从为其传递的自变量中获取初始值。
修改值形参不会影响为其传递的实参。
可以指定默认值,从而省略相应的自变量,这样值参数就是可选的。
引用参数用于按引用传递自变量。
为引用参数传递的自变量必须是一个带有明确值的变量。
在方法执行期间,引用参数指出的存储位置与自变量相同。
引用参数使用ref修饰符进行声明。
下面的示例展示了如何使用ref参数。
static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
public static void SwapExample()
{
int i = 1, j = 2;
Swap(ref i, ref j);
Console.WriteLine($"{i} {j}"); // "2 1"
}
输出参数用于按引用传递自变量。
输出参数与引用参数类似,不同之处在于,不要求向调用方提供的自变量显示赋值。
输出参数使用out修饰符进行声明。
下面的示例展示了如何使用out参数。
static void Divide(int x, int y, out int quotient, out int remainder)
{
quotient = x / y;
rem