• 类和对象


    类是数据类型的实现,而对象是类的实例。

    类的成员是声明在类里面的实体。C#类的成员共有六种:字段、属性、索引器、方法、事件和嵌套类型。

    C#的字段用const修饰,表示他只能在声明的时候被初始化;用readonly修饰,表示只能在声明时或构造函数中初始化。两种情况下字段的值在初始化之后都不能再改变。
    在对象开始使用之前,所有值类型的字段都必须初始化,即必须在对象构造结束之前被初始化。有两种方法初始化:
    1. 在类中声明时直接初始化;
    2. 在类的构造函数中初始化。

    const字段必须在声明时被初始化,否则编译器会报错。而且const隐含static。
    readonly字段应在构造函数结束之前被初始化,否则该字段将永远保持为null,但编译器不会报错。

    在方法声明和调用时,同时使用ref关键字,C#可以使得方法强制按引用传递参数。既能用在值类型也能用在引用类型上。
    参数在方法的签名中以及方法调用时都用out关键字来标记,则可以使得该参数作为方法的返回值,即其值可以返回。此外,实参不需要初始化。方法必须要初始化这些形参,否则不能使用它们。
    C#允许方法带有不定数目的参数。实现该特性的语法是使用params关键字。应用params关键字的参数必须是参数表中最后一个参数。
    使用params关键字的参数可以应用于object类型,通过这个技巧该参数就可以接受各种类型。

    方法重载:一个类的多个方法使用相同的名称。
    其方法参数表必须各不相同。编译器区分不同方法时并不考虑返回值的类型。

    C#允许对象提供事件,事件的概念包括以下几点:
        事件的订阅者,当事件引发时每个订阅者都会收到通知。订阅者可以动态地(即在程序运行时)选择订阅或退订事件。在C#中,订阅者表示为一个方法。
        事件本身,可以在任何时候可以由对象引发。从内部来说,事件知道它的订阅者。事件的职责就是在其引发的时候用事件的参数通知每一个订阅者。在C#中,除了使用event关键字声明的以外,事件类似于类中一个委托类型的字段。
    使用event关键字(定义事件)的好处之一就是防止事件在类的外部引发。即使是定义事件的类所派生的子类也不能触发事件,即使这个事件是虚的也不能。
    当一个事件被引发时,订阅事件的方法会在引发该事件的线程中执行。
    订阅者的执行时间可能会很长或引发异常,这说明,激发事件的方法不应该与订阅事件的方法耦合。可以让订阅的方法异步执行。

    内部可见性级别以及内部或保护可见性级别不能应用于结构体成员。
    因为一个类A的私有成员只能在它的内部访问,这意味着类A的实例I1能够访问同一个类的另一个实例I2的私有成员。有点困惑,可以查看这里

    在类中,只要定义了至少一个构造函数,编译器就不会提供默认构造函数。
    而在结构中,因为不允许定义没有参数的构造函数,所以编译器始终会提供一个默认的构造函数。

    C#语言提供了一个使用using关键字的语法可以隐式地在一个try/finally块中自动调用Dispose()方法。即:

    Article a = new Article(300);
    try
    {
    }

    finally
    {
        a.Dispose();
    }

    等价于

    Article a = new Article(300);
    using(a) 
    {
    }

    对于using(a) using(b) {},在有效区域末尾调用Dispose()方法的顺序是先调用b.Dispose(),然后才是a.Dispose()。
    当一个类实现了IDisposable接口,推荐在调用Dispose()之后,通过引发System.ObjectDisposedException异常来阻止对象的其他方法调用。为了留给用户较多的余地,还推荐允许多次调用一个对象的Dispose()。当然,只有第一次调用才起作用。

    终结器是通过覆写Object类的Finalize()方法来定义的。结构没有终结器。CLR认为没有重写该方法的类就没有终结器。
    终结器是在对象被垃圾收集器收集时调用的。对象状态所占的内存将在下一次垃圾收集时释放。

    静态方法无法访问类的非静态方法、字段、属性和事件。
    静态构造函数,有时也称为类构造函数,其声明的方法是在前面加上static关键字,并且不能带参数。而且不能带有可见性修饰符。
    C#2.0运行定义静态类。静态类只能包含静态成员。C#编译器不为静态类提供默认构造函数。由于不具有实例构造函数,所以无法实例化静态类。而且不能继承一个静态类。结构不能是静态的。ee6d64b9

  • 相关阅读:
    今天更新Chrome到1.0版本
    升级安装Windows7后需要处理的兼容性程序(不断更新中)
    解决IE8下无法播放rm的视频网站内容
    升级到NVelocity1.1版本
    安装VS2010中文版初体验
    【iPhone开发】说说Xcode4中xib绑定的原理
    第一个iPhone版本应用发布
    xcode4.2开发最新的ios5应用,分享snow版本下载地址
    xCode 4.X 免证书真机发布及调试
    [转]IT程序员之间薪水差距之大及对职业培训的看法
  • 原文地址:https://www.cnblogs.com/adaiye/p/ClassAndObject.html
Copyright © 2020-2023  润新知