当前位置:软件学习 > Word >>

C# Keywords Series 8 interface&virtual&abstract&override&new

  本文主要讲述 interface 、 virtual 、 abstract、override、new(修饰符) 的使用方法和区别。
 
  interface
 
  interface 只能包含方法、属性、事件和索引,实现接口的类必须实现接口成员。只提供一些方法规约,不提供主体,不能用 public 、 abstract 等修饰。请看实例:
 
[csharp]  
interface IAnimal  
{  
    void Eat();  
  
    void Run();  
  
    void Play();  
}  
class Dog:IAnimal  
{  
    public void Eat()  
    {  
        // Eat  
        Console.WriteLine("Your dog is eating");  
    }  
    public void Run()   
    {  
        // Run  
        Console.WriteLine("Your dog is running");  
    }  
  
    public void Play()  
    {   
        // Play  
        Console.WriteLine("Your dog is playing");  
    }  
    static void Main(string[] args)  
    {  
        // 声明一个接口实例  
        IAnimal animal = new Dog();  
  
        // 调用接口成员  
        animal.Eat();  
    }  
}  
 
   一个接口可以从一个或多个基接口继承。再重申下interface 和 abstract 两者之间的区别:
 
    1.interface 不能包含方法实现,abstract class可以包含也可以不包含。
 
    2.interface只能继承interface,abstract class可以继承class或者一个或多个interface
 
    3.interface不能包含字段,可以包含属性,abstract class 都可以包含
 
    4.interface不能包含构造和析构函数, abstract class都可以
 
    5.interface支持多继承,abstract class不支持多继承
 
  abstract
 
  abstract 关键字用来修饰方法、类、属性、索引和事件声明,标记为 abstract 的抽象类的成员必须通过抽象类的派生类来实现。这里之前说过 abstract 就不说了,给个地址 :http://blog.csdn.net/ywy0012011/article/details/8167161。
 
  virtual
 
  virtual 关键字用来修饰方法、属性、索引和事件声明,使它们在子类中可以被重写。
 
  静态属性使用 virtual 是错误的。通过使用 override 属性声明,可以在派生类中重写虚拟继承属性。
 
  override
 
  override 提供从基类继承的成员实现。不能重写非虚方法或静态方法,重写的基类方法必须有 virtual 、 abstract 或 override 修饰的。override 声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有相同的访问级别修饰符。
 
  new (修饰符)
 
  new 关键字可以显示隐藏从基类继承的成员。 一般方法,若在派生类中重写,须使用new关键字。new 和 override 的区别,即重写和隐藏的区别:
 
  new 的用法:
 
[csharp]  
class Circle : Shape  
{  
    // 隐藏字段 'x'  
    new public static int x = 100;  
    static void Main()  
    {  
        // 显示 x 新的值  
        Console.WriteLine(x);  
  
        // 显示 x 的隐藏值  
        Console.WriteLine(Shape.x);  
  
        // 显示非隐藏的值 y  
        Console.WriteLine(y);  
    }  
}  
/* Output: 
100 
22 
55 
 */  
 
 
 
  override 用法
[csharp]  
abstract class ShapesClass  
{  
    abstract public int Area();  
}  
  
class Square : ShapesClass  
{  
    int side = 0;  
    public Square(int n)  
    {  
        side = n;  
    }  
    public override int Area()  
    {  
        return side * side;  
    }  
    static void Main()  
    {  www.zzzyk.com
        Square sq = new Square(12);  
        Console.WriteLine("Area of the square = {0}", sq.Area());  
    }  
}  
/* Output: 
 Area of the square =144 
 */  
  abstract和virtual 的区别:
 
  1: Abstract方法只能在抽象类中声明,虚方法则不是。
      Abstract方法必须在派生类中重写,而virtual则不必(可以override也可以不用override)
  2: Abstract方法不能声明方法实体,
      abstract public void SD();
      虚方法则可以
  3. abstract,virtual在实现过程中需要用到new 和 override,而interface则不用
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,