小鱼儿-fly

c#,ASP.NET 一条艰辛而漫长的道路...千里之行,始于足下!

导航

C#中的几个关键字

Posted on 2010-10-26 11:06  小鱼儿-fly  阅读(448)  评论(0编辑  收藏  举报

partial:

    分部类型定义允许将类、结构或接口的定义拆分到多个文件中。通俗的说,把一个类可以放到多个文件中。

 

virtual(虚方法):

       关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。例如,此方法可被任何继承它的类重写。

       virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。

       在静态属性上使用 virtual 修饰符是错误的。通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性

override(重写):

       要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。 override再重写时,方法的签名、参数类型个数                        与返回值类型必须相同,只是改变方法。

       override 方法提供从基类继承的成员的新实现。通过 override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具有相同的签                 名。不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或 override 的。

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

       不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

       重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是 virtual、abstract 或 override 的

 

overload(重载):

       用于同一个类中同名方法不同参数(包括类型不同或个数不同)的实现

base:  base 关键字用于从派生类中访问基类的成员:

          调用基类上已被其他方法重写的方法。

          指定创建派生类实例时应调用的基类构造函数。

          基类访问只能在构造函数、实例方法或实例属性访问器中进行。

          从静态方法中使用 base 关键字是错误的。

sealed:

    sealed 修饰符可以应用于类、实例方法和属性。

    密封类不能被继承。

    密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。

    当应用于方法或属性时,sealed 修饰符必须始终与 override 一起使用。

new:

new 运算符

    用于创建对象和调用构造函数。

      Class1 o  = new Class1();

    还用于调用值类型的默认构造函数

       int i = new int();

    new 运算符分配内存失败,将引发异常 OutOfMemoryException

new 修饰符

    在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用 new 修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new 显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。

若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用 new 修饰符修饰该成员

 

通过继承隐藏名称采用下列形式之一:

  引入类或结构中的常数、指定、属性或类型隐藏具有相同名称的所有基类成员。

  引入类或结构中的方法隐藏基类中具有相同名称的属性、字段和类型。同时也隐藏具有相同签名的所有基类方法。

  引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。

  对同一成员同时使用 new 和 override 是错误的,因为这两个修饰符在含义上相互排斥。使用 new 会用同样的名称创建一个新成员并使原始成员变为隐藏的,而 override 则扩展继承成员的实现。

在不隐藏继承成员的声明中使用 new 修饰符将会生成警告。

 

new 约束

   指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。当泛型类创建类型的新实例时,将此约束应用于类型参数,如下面的示例所示:

     class ItemFactory<T> where T : new()
    {
          public T GetNewItem()
          {
              return new T();
          }
    }

abstract:

    abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。

           在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含抽象类中的成员必须通过从抽象类派生的类来实现。

    在静态属性上使用 abstract 修饰符是错误的.

    在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。

    抽象类必须为所有接口成员提供实现。

抽象类具有以下特性:

  • 抽象类不能实例化。
  • 抽象类可以包含抽象方法和抽象访问器。
  • 不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。
  • 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
  • 在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。

抽象方法具有以下特性:

  • 抽象方法是隐式的虚方法。
  • 只允许在抽象类中使用抽象方法声明。因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod();
  • 实现由一个重写方法override提供,此重写方法是非抽象类的一个成员。
  • 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。
  • 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。

this:

    this 关键字引用类的当前实例。

    以下是 this 的常用用途:

      限定被相似的名称隐藏的成员,例如:

        public Employee(string name, string alias)
        {
              this.name = name;
              this.alias = alias;
        }

      将对象作为参数传递到其他方法,例如:

          CalcTax(this);

      声明索引器,例如:

        public int this [int param]
        {  
              get { return array[param];  }
              set { array[param] = value; }
        }

      由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。在静态方法中引用 this 是错误的。