虚方法笔记
2011年09月01日
没用virtual时的情况:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { B b = new B();//此时b的内容是:A.F()和B.F() A a = b; //此时a的内容是A.F() a.F(); b.F(); Console.Read(); } } //创建类A class A { public void F() { Console.WriteLine ("A.F()"); } } //创建类B 继承于A class B:A { public new void F() { Console.WriteLine("B.F()"); } } }
使用virtual
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { C c = new C();//此时a b c的内容是c.F() B b = c; A a = c; a.F(); b.F(); c.F(); Console.Read(); } } //创建类A class A { public virtual void F() { Console.WriteLine ("A.F()"); } } //创建类B 继承于A class B:A { public override void F() { Console.WriteLine("B.F()"); } } //创建类C 继承于B class C : B { public override void F() { Console.WriteLine("C.F()"); } } }
2011年09月01日
没用virtual时的情况:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { B b = new B();//此时b的内容是:A.F()和B.F() A a = b; //此时a的内容是A.F() a.F(); b.F(); Console.Read(); } } //创建类A class A { public void F() { Console.WriteLine ("A.F()"); } } //创建类B 继承于A class B:A { public new void F() { Console.WriteLine("B.F()"); } } }
使用virtual
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { C c = new C();//此时a b c的内容是c.F() B b = c; A a = c; a.F(); b.F(); c.F(); Console.Read(); } } //创建类A class A { public virtual void F() { Console.WriteLine ("A.F()"); } } //创建类B 继承于A class B:A { public override void F() { Console.WriteLine("B.F()"); } } //创建类C 继承于B class C : B { public override void F() { Console.WriteLine("C.F()"); } } }
本文详细介绍了在C#中使用virtual关键字实现虚拟方法的概念、语法和应用场景,包括类的继承、方法覆盖及调用过程,通过实例展示了虚拟方法在解决多态问题中的优势。
912

被折叠的 条评论
为什么被折叠?



