C# 类的成员——字段、方法、构造函数和属性
——
声明:本文内容系互联网整理收集,内容有改动。主要参考资料:
https://www.runoob.com/csharp/csharp-tutorial.html 菜鸟教程
https://docs.microsoft.com/zh-cn/dotnet/csharp/ Microsoft C#文档
零散的资料在每章节末尾给出。
————
类描述了一组有相同属性和相同方法的对象。
0类的成员
类的成员如下图所示:
本文主讲字段、方法和属性
1方法
一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个 C# 程序至少有一个带有 Main 方法的类,要使用一个方法,需要定义方法并调用方法。
方法的定义模板:
<Access Specifier> <Return Type> <Method Name>(Parameter List)//访问修饰符;返回类型;方法名称;参数列表
{
Method Body//方法主体
} //template
——
class Shape//定义类
{
public void setWidth(int w)//定义方法
{
width = w;
}
} //example
方法可以用访问修饰符进行封装。(详见【字段】章节)
main方法
定义格式:
tatic void Main(string[] args)
{
...
}
string[ ] args 指的就是你在命令窗口输入的参数,也就是命令行参数。
函数与方法的关系
方法在某种程度上相当于C语言的函数。但在正式的c#术语中区分函数和方法。在c#术语中,“函数成员”不仅包含方法,也包含类或结构的一些非数据成员,如索引器、运算符、构造函数和析构函数等,甚至还有属性。这些都不是数据成员,字段、常量和事件才是数据成员。
2构造函数
- 构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;
- 一个类可以有多个构造函数(构造函数的重载)。
- 构造函数必须存在。如果没有为类提供构造函数,则 C# 将默认创建一个构造函数,该函数会实例化对象并将成员变量设置为默认值。
类的 构造函数 是类的一个特殊的成员函数,是一种特殊的方法,主要用来在创建对象时初始化对象(为新对象的成员变量赋初始值),总与new运算符一起使用对该类进行实例化( 实例化对象就是调用合适的构造函数进行类的实例化)。
构造函数的名称与类的名称完全相同,它没有任何返回类型。 默认的构造函数没有任何参数。带有参数的构造函数叫做参数化构造函数,可以在创建对象的同时给对象赋初始值。
class Chinar
{
private int a = 1;
private int b = 1;
private string c = "Chinar";
private object d = 666;
//构造函数用来完成 —— 初始化工作
public Chinar() //声明构造函数,函数名与类名相同
{
//每个类,本身默认有一个。如果我们不写明这个 public Chinar()函数,系统仅调用系统默认的。
//自定义构造 public Chinar()函数后,系统只会调用自定义的 Chinar()
}
——————
//这是一个多参数的构造函数
public Chinar(int a, int b, string c, object d)
{
...
}
}
new 运算符:用于创建对象和调用构造函数(即类的实例化),格式为:
类 实例名 = new 类();
例:Shape sha = new Shape();
3字段
字段又称为“成员变量”,一般用在一个类内部做数据交互使用,通常使用private修饰。
字段的数据类型有:
访问修饰符有:
public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。
实例:
class Shape//定义类
{
public void setWidth(int w)//定义方法
{
width = w;
}
protected int width;//定义字段(成员变量)
protected int height;
}
4属性
属性是 C# 中的一等公民。
属性属于高级概念,在OOP(面向对象)中,主要使用属性来描述对象的静态特征。属性一般采用public修饰。
属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中的成员变量或方法称为 域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用 访问器(accessors) 让私有域的值可被读写或操作。
属性的定义格式:
_name(属性名)
public [对应字段类型] 属性名Name
{
get{return _name;}
set{_name=value;}
}
属性和字段的区别
C#属性是字段的扩展
属性是类或对象中的一种智能字段形式。 从对象外部,它们看起来像对象中的字段。 但是,属性可以通过丰富的 C# 功能来实现。
访问属性时,其行为类似于字段。 但与字段不同的是,属性通过访问器实现。