.net平台最基本的编程结构就是类类型,正式的说,类是由字段数据(成员变量)以及操作这个数据的成员(构造函数、属性、方法、事件等)所构成的自定义类型。总的来说,其中的字段数据用于表示类实例的‘状态’(对象)。C#这样基于对象的语言的强大之处就在于,通过将数据和相关功能集合在类定义中,我们就可以仿照现实生活中的实体来设计软件。(面相对象)类定义://关键字是class,类名是Car class Car { //Car的状态 public string petName; public int currSpeed; //Car的功能 public void PRintState() { Console.WriteLine("{0} is going {1} MPH.", petName, currSpeed); } public void SpeedUp(int delta) { currSpeed += delta; } }说明,虽然上述我们用了两个共有字段表示类的‘状态’,但是类的字段很少定义为公有的,为了保护状态数据完整,我们一般将字段定义为私有,并且通过类型属性对数据提供受控制的访问。上面定义了成员变量,那么描述其行为的就是成员,例如上述类中的一个SpeedUp()方法和一个PrintState()方法.在Program类中写入如下代码: static void Main(string[] args) { Console.WriteLine("****Fun with class types****"); Car myCar = new Car(); myCar.petName = "Henry"; myCar.currSpeed = 10; for (int i = 0; i <= 10; i++) { myCar.SpeedUp(5); myCar.PrintState(); } Console.ReadLine(); }当我们运行程序就看到类方法输出的状态数据。new关键字:对象必须用new关键字来分配到内存中。new关键字主要是为了把引用付给对象。只有new之后才会把引用赋给对象,这个引用才会指向没村中的有效类实例。
每个C#类都提供了内建的默认构造函数,需要时可以重新定义。根据定义,默认构造函数不会接受任何参数。在上类中更新如下方法: public Car() { petName = "GoodGirl"; currSpeed = 10; }当我们创建对象之后,直接调用PrintState方法就会打印出来GoodGirl is going 10 MPH.
2.定义自定义的构造函数:
除了默认构造函数,我们还可以自定义不同的构造函数。让构造函数彼此不同的是构造函数参数的个数和类型。当我们定义了具有同样名字但参数数量和类型不同的方法时,就是重载方法。因此,我们自定义构造函数相当于是方法重载。比如除了上述的构造函数,我们还可以构造如下: public Car(string p) { petName = p; }
3.再谈默认构造函数:
如果自定义了构造函数,那么默认的构造函数就会自动从类中移除,不再有效。因此,如果希望对象用户使用默认构造函数和自定义构造函数创建类型实例,就必须显示重新定义默认构造函数。如下新建一个类所示: class Motorcycle { public intintensity; public void PopAWheely() { for (int i = 0; i <=intensity; i++) { Console.WriteLine("aaaa hhhhh!"); } } //显示默认构造函数 public Motorcycle() { } //自定义构造函数 public Motorcycle(int intensity) { this.intensity= intensity; } }
public static string A(){//处理逻辑};静态成员只能操作静态数据或者调用类的静态方法,如果你常事在静态成员中使用非静态类数据或调用非静态类方法,就会收到编译时错误。
2.定义静态数据:
public static double currentNum=0.04;不同于非静态数据那样类型每个对象都会维护字段的一个独立副本,静态字段只在内存中分配一次,之后所有的类型的对象操作的将会是同一个值。所以,要记住的是,静态数据字段是所有对象共享的,因此如果你要定义一个所有对象都可以分享的数据点,就可以使用静态成员。
你可以直接在代码库中使用封装了数字或布尔数据的自动属性,因为隐藏的返回字段将设置一个可以直接使用的安全默认值。但如果自动属性包装了另一个类变量,隐藏的私有引用类型的默认值也将设置为null。public int A {get; set;}//隐藏的int返回字段设置为0 public Car B{get;set;}//隐藏的Car返回字段设置为null;由于私有的返回字段是在编译时创建的,所以你不能使用C#的字段初始化语法用new关键字直接分配引用类型,这项工作必须在类构造函数内部执行,以确保对象以安全的方式诞生。class Car{ public int A{get;set;} public Car() { A=1; }}
对象初始化器语法
为了简化新建对象的过程,C#提供了对象初始化器语法,语法组成为:大括号内部用逗号分隔的指定值列表:Car car = new Car(){ petName="abc";}对象初始化语法只是使用默认构造函数创建类变量并设置各个属性状态数据的语法的简写形式。
常量数据
const int a=100;C#通过const关键字来定义常量(它在赋初始值后从未变过)。而类的常量字段是隐式静态的。然而,我们可以在类型成员中定义和访问局部常量。注意,常量在定义时必须为其指定初始值。否