对于初次接触面向对象或者从面向过程转到面向对象的时候,需要很长一段时间去熟悉。
针对面向对象思想,我们来介绍一下类、属性、方法、构造函数、析构函数、params、命名空间等常用的概念。
可能很多人搞不清什么是类,我们可以把很多具有相同特性的物体统称为一类,比如老师和同学虽然职务不同,但是都有符合人的特征,所以老师和同学都属于人这个类。
定义一个类的好处是可以规定相同一类东西要具有的字段和属性。
例如,人类具有姓名,年龄,体态,性别等相同的属性
public class Person { public string name; public int age; public char sex; public void sayhello() { Console.WriteLine("你好"); } }
上面的代码中,我们定义了一个人类,人类有名字,年龄,性别三个字段和一个打招呼的方法。
但是显然,通过直接对类的字段赋值是不安全的,可能会使不能改变的值意外的改变。那么我们就要用到属性,把不允许直接访问的字段定义为类的私有字段,然后通过封装字段来进行对私有字段的只读,只写,或者读写操作。
private string name; public string Name { get { return name; } set { name = value; }
上面的代码即对name字段进行了封装,封装后得到的Name被称之为类的属性,属性里有get和set两个关键字,get负责把值输出,set负责给私有字段赋值。
get和set的大括号里也可以写一些判断,以保障写入的值为允许的,正常的。
当我们把get删掉时,该属性就变成了只写,当我们删掉set的时候,该属性就变成了只读,当get和set同时存在时,属性为读写
当我们把一个属性变成只读时,相应的我们会遇到一些问题,问题就是无法给这个私有字段赋值,这时候就要用到构造函数来进行赋值。
例如:
public Person(string name) { this.name = name; } private string name; public string Name { get { return name; } }
上面的代码中,name属性被设置为只读,无法对其进行赋值,且name为私有字段,Person便是person类的构造函数,通过传入一个name变量来给name赋值,赋值后,name就不能进行更改,只能进行读取。
析构函数在C#中的应用较少。析构函数即是垃圾回收器在回收当前内存前要执行的方法,语法是在普通的构造函数之前加”~“符号,因为使用较少,再此不再赘述。
Params关键字:
Params关键字可以使一个数组进行分散式的赋值,例如
public static void WriteLine(string format, params object[] arg);
对于命名空间,当我们有两个相同的类但却在不同的项目中的时候,两个类互相不发生关系,若是对两个项目进行对接的话,那么两个类就会发生冲突,这时就需要用命名空间来区分二者。