C#中的虚函数
1. 虚函数的特点
虚函数是⾯向对象语⾔中多态性的重要实现. 当⼀个函数⽅法在声明时, 前⾯带了virtual关键字, 这个函数就是⼀个虚函数. 它与⾮虚函数的主要区别在于它的实现可以在派⽣类中进⾏重写(override)(⾮强制要求). 重写后的函数⼀样也是虚函数, 当⼀个类或其基类中存在虚函数后就不允许出现同名, 返回值, 参数类型个数相同的⾮虚函数.
虚函数由于可以被⼦类改写的特点, 不允许设为私有(private), 同时也不能和static, override, abstract等⼀起使⽤.除了函数⽅法外, C#中还可以⽤virtual修饰属性, 索引器, 事件等等.
2. 虚函数的执⾏过程
当调⽤⼀个对象的⼀个函数时, 系统会⾸先去检查该对象的声明类中这个函数是不是虚函数, 如果不是虚函数就直接执⾏函数. 如果是虚函数的话再去检查这个对象的实例类, 看看实例类中有没有重写这个虚函数, 如果有的话就直接执⾏该函数, 否则就去这个实例类的⽗类, 看看他的⽗类中有没有重写这个虚函数,有的话就执⾏, 没有的话就继续直到遍所有⽗类, 如果没有override关键字, 最后会执⾏申明类⾥的虚函数.
代码来了!
public class GoodClass
{
public virtual void GoodFunc()
{
Console.WriteLine("This is a good function");
}
}
public class NiceClass : GoodClass
{
public override void GoodFunc()
{
Console.WriteLine("This is a nice function");
}
}
public class start
{
writeline函数public void main()
{
GoodClass gc = new GoodClass();
gc.GoodFunc();
GoodClass nc = new NiceClass();
nc.GoodFunc();
}
}
This is a good function
This is a nice function
public class GoodClass
{
public virtual void GoodFunc()
{
Console.WriteLine("This is a good function"); }
}
public class NiceClass : GoodClass
{
public override void GoodFunc()
{
Console.WriteLine("This is a nice function"); }
}
public class GreatClass : NiceClass{}
public class start
{
public void main()
{
GoodClass gc = new GreatClass();
gc.GoodFunc();
}
}
This is a nice function
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论