一, 类
定义类使用 class 关键字.
- <access specifier> class class_name
- {
- // member variables 成员变量
- <access specifier> <data type> variable1;
- <access specifier> <data type> variable2;
- ...
- <access specifier> <data type> variableN;
- // member methods 成员方法
- <access specifier> <return type> method1(parameter_list)
- {
- // method body
- }
- <access specifier> <return type> method2(parameter_list)
- {
- // method body
- }
- ...
- <access specifier> <return type> methodN(parameter_list)
- {
- // method body
- }
- }
请注意:
访问标识符 <access specifier> 指定了对类及其成员的访问规则. 如果没有指定, 则使用默认的访问标识符. 类的默认访问标识符是 internal, 成员的默认访问标识符是 private.
数据类型 <data type> 指定了变量的类型, 返回类型 <return type> 指定了返回的方法返回的数据类型.
如果要访问类的成员, 你要使用点 (.) 运算符.
点运算符链接了对象的名称和成员的名称.
类的内部定义不同的成员, 这些成员包括
1)字段: 内部定义的一种变量
2)属性: 用于描述对象的特征
通常属性带有 get 和 set 访问器, get 访问器用来获取属性的值 ,set 访问器则用来设置属性的值 . 如果 希望让属性只读, 即只能获取其值而不允许对其进行赋值, 直接去掉 set 访问器即可, 仅保留 get 访问器.
如果属性不需要特殊验证可以简化写成
publie string Name{get;set;}
不简化
- publie string Name
- {
- get{return this.name;}
- set{this.name=value;}
- }
设置默认值
publie string Name{get;set;}=700
只读属性
- 1)publie string Name{
- get;
- }
- 2)// 还可以使用类似 Lambda 表达式来声明
- publie int MaxTaskNum=>500;
当使用 "=>" 操作符来声明只读属性时, 不需要写 get 语句 , 也不需要也 return 关键字,"=>" 后面直接 写上返回值 即可.
字段是真正存储数据值 的变量, 而属性只是一个对外公开的窗口, 数据通过属性来传递. 当获取属性的值 时, 通过 retrun 关键字直接把字段中存放的值 返回. 当要设置属性的值 时, 调用 set 访问器把外部传进来的数据存放到 value 中, 再以 value 作为纽带把数据赋值给字段.
3)方法: 对象的行为
带有参数的方法
- int Add(int a ,int b )
- {
- return a+b;
- }
不按顺序参数调用方法
Add(b:5,a:6
定义可选参数, 就是在调用方法时, 可以忽略的参数, 就是可选 参数要赋值默认值. 如下 P1 是可选参数, P2 由于已赋了默认值, 就成了可选参数
- void DoWor(string p1,string p2="abc")
- {
- }
这要调用
DoWork("123");
因为 P2 是可选参数, 这样是对的, 但如下就是不对的, p1 是可选参数, 如果仍然采取上面的调用方法, 就会提示错误 , 由此可见可选 参数要放在参数列表最后一列, 因为放在前面 无法一一对应.
- void DoWor(string p1="abc",string p2)
- {
- }
也可以 Lamebda 表达式的形式来声明
- public string PickName()=>"jack";//PickName 方法没有参数, 返回一个字符串实例 .
- public string PickName(int a ,int b)=>a+b;// 带参数的方法
写一个例子
用属性来封装 name 字段, 是为了安全性. 不让直接该变量字段, 也可以进行判断一些规则, 不让值 随便修改
- class Program
- {
- static void Main(string[] args)
- {
- Person ps =new Person();// 类在使用的时候, 必须使用 new 实例化.
- ps.Name="小红";
- ps.Age=20;
- ps.Play();// 调用方法
- console.Read();// 让代码执行到这边可以停
- }
- }
- public class person
- {
- // 字段
- string name;// 字段默认为 private, 可以不写 private, 代表只能在类里面使用
- public string Name;// 公共的字段, 可以在类外面使用该字段
- // 属性
- public string Name
- {
- get {return name;}// 返回 name 的值
- set { name=value;}// 给 name 值 赋值
- }
- int age
- public int age
- {
- get {return age;}
- set
- {
- if (value<0)
- {
- throw new ArgumentException("属性值不能小于 0");// 抛出异常
- }
- age=value;
- }
- }
- // 方法
- public void play()
- {
- Console.WriteLine("一起去玩");
- }
- }
4)事件: 在特定条件下触发的行为
5)构造器, 构造函数, 构造方法. 它是一种特殊的方法, 在创建对象实例时调用, 用来进行一些初始化工作.
在类被实例化的时候 (创建类的对象实例时)调用, 它也是类的成员, 具有以下特点:
构造函数的名称必须与类名相同
构造函数没有返回值
默认构造函数没有参数, 但也可以定义参数.
即使开发人员不为类编写构造函数, 它默认就有一个不带参数的构造函数,
如果 希望在类型初始化的过程中加入自己的处理的代码, 或者使用带参数的构造函数, 就有必要息来定义构造函数
来源: http://www.bubuko.com/infodetail-2831834.html