C#修饰符之一(常用类)

来源:互联网 发布:白俄罗斯知乎 编辑:程序博客网 时间:2024/06/02 07:46

virtual (虚方式)

virtual  修饰符用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。

1、可以有自己的实现。

2、在声明一个类的实例之前,它都不存在于真实的内存空间中。

3、virtual 修饰符不能与staticabstract, privateoverride 修饰符一起使用。

4、继承它的子类可以由 override重写。

 

使用virtual及 override后

类 实例名=new 子类()

实例名.方法=子类的方法

使用New 后

类 实例名=new 子类()

实例名.方法=父类的方法

 

override (重写)

override 修饰符要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用override 修饰符。

1、 不能重写非虚方法(非 virtual 定义 )或静态方法(static)。重写的基方法必须是virtualabstractoverride 的。

2、override 声明不能更改 virtual 方法的可访问性。 override 方法和 virtual 方法必须具有相同的访问级别修饰符。

 

abstract(抽象)

abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

1、抽象类不能实例化

2、从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现

3、不可以有自己的实现。定义方法的存在而不去实现的类,继续的类必须要重写它的方法。抽象类中可以有变量定义及非抽象方法,接口中不能


不怎么会去实例化的类和只是定义不去实现的方法一般定义为abstract,又可以定义为:没有实现体的虚方法

 

interface(接口)

interface修饰符接口,只提供一些方法规约,不提供方法主体。例如不能定义变量等。。

 

1、抽象类可以给出一些成员的实现,接口不行

2、抽象类的抽象成员可被子类部分实现,接口必须完全

3、一个类只能继承一个抽象类,可以实现有多个接口

4、类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象

5、如果行为跨越不同类的对象,使用接口;对于 一些相似的类对象,使用抽象类

6、抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法如果实现还不确认,预先定义

 

 

const(常数编译时常数)

const修饰符用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,不能被修改。

1、不允许在常数声明中使用 static 修饰符

2、常数可以参与常数表达式

public const int c1=10;

public const int c2 = c1 + 100;

 

readonly(只读[运行时常数])
readonly 关键字与 const 关键字不同。 const 字段只能在该字段的声明中初始化。 readonly 字段可以在声明或构造函数中初始化。 因此,根据所使用的构造函数,readonly 字段可能具有不同的值。 另外,const 字段为编译时常数,而 readonly 字段可用于运行时常数。

 readonly int _year;
        Age(int year)
        {
            _year = year;
        }
        void ChangeYear()
        {
            //_year = 1967; //在函数初始化时已经赋值,再赋时出错
        }

 

sealed(拒绝继承)

当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。 在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类B 继承。

 class A {}   
    sealed class B : A {}


static(静态)
不能通过实例引用静态成员。然而,可以通过类型名称引用它

in,out,ref的作用
就象你把布料送到裁缝的一个收料箱(裁缝用这个区别是哪家客户)
IN:这块布料,不能动,我取时还要原样(我取时会要不要这块料,是我自己的事,你管不着,但你不能把这块料做任何改变,你只能看这块料的质地、色彩等等,你要想改变这块料,那自已去照这块料的样子复制一个)
out:我可能给了你布料,也可能没给,也可能我给你的只是一张纸或一块羊皮,但我希望无论我给或没给,你都会给我一件衣服,并放到收料箱中,至于放不放衣服是你的事(必须赋值)
ref:这块布料,保证是布料,你可以加工,也可以不加工,但无论你加工或是没加工,都得给我放回收料箱中。

extern(外部实现的方法)
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

访问权限
public 公有访问。不受任何限制。
private 私有访问。只限于本类成员访问,子类,实例都不能访问。
protected 保护访问。只限于本类和子类访问,实例不能访问。
internal 内部访问。只限于本项目内访问,其他不能访问。
protected internal 内部保护访问。只限于本项目或是子类访问,其他不能访问
 
转载至:http://blog.csdn.net/zhouleijian317/article/details/6426788