您的位置:首页 > 其它

abstract、virtual、override、new

2010-11-01 16:31 218 查看
关于这几个关键词,很多人的理解可能是字面上的含义:抽象、虚方法、覆盖、和新建。但是仔细的研究一下,发现并不仅仅是这些。下面就对这几个词作一些进一步的解释:

abstract:抽象,用于对类、方法、属性的定义,表示是一个抽象的类、抽象的方法或者是一个抽象的属性。对于抽象的类,不能被实例化;抽象方法只能有方法声明,不能有实现;属性也一样,只能有声明而不能有实现。抽象方法和抽象属性只能在抽象类中,但是抽象类可以包含非抽象的方法和属性。

virtual:虚拟的方法或属性。可以有相应的实现。在子类继承中,可以使用override重写该方法,这样父类在实例化时会调用子类的方法;如果子类使用new 重写该方法,则相当于是对该方法的“隐藏”,父类实例化为该子类时,调用的依然是父类的方法。

override:重载,使用该关键词时,父类实例化为该子类时,调用的是子类的方法。

new: “新建”,该关键词会隐藏父类的方法,从而使父类实例化为该子类时,调用的是父类的方法,而非子类的方法。

例:

// IAnimal接口
public interface IAnimal
{
string Name
{
get;
set;
}

void Run();
}

// Sheep abstract class
public abstract class Sheep:IAnimal
{

private string color;
public virtual string Color
{
get { return this.color; }
set { this.color = value; }
}
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; }
}

public virtual void Run()
{
System.Console.Write("羊的抽象类");
}

public virtual void Call()
{
System.Console.Write("羊的叫声");
}

public abstract void Eat();

public void Sleep()
{
System.Console.Write("羊的睡觉");
}

}

//WhiteSheep class
public class WhiteSheep:Sheep
{

private string color;
public override string Color
{
get
{
return this.color;
}
set
{
this.color = value;
}
}

public override void Eat()
{
System.Console.Write("白羊吃草");
}

public new void Run()
{
System.Console.Write("白羊");
}
public override void Call()
{
System.Console.Write("白羊的叫声");
}
public new void Sleep()
{
System.Console.Write("白羊的睡觉");
}
}

WhiteSheep sheep = new WhiteSheep();
sheep.Call();//System.Console.Write("白羊的叫声");
sheep.Eat();/System.Console.Write("白羊吃草");
sheep.Run();//System.Console.Write("白羊");
sheep.Sleep();//System.Console.Write("白羊的睡觉");

Sheep sheep1 = new WhiteSheep();
sheep1.Call();//System.Console.Write("白羊的叫声");
sheep1.Eat();//System.Console.Write("白羊吃草");
sheep1.Run();//System.Console.Write("羊的抽象类");
sheep1.Sleep();//System.Console.Write("羊的睡觉");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: