interface IC { } class A : IC { } class B1 : A { } class B2 : A, IC { } class Program { staticvoid Main() { A a =new A(); B1 b1 =new B1(); B2 b2 =new B2(); Console.WriteLine(a is IC); Console.WriteLine(b1 is A); Console.WriteLine(b1 is IC); Console.WriteLine(b2 is A); Console.WriteLine(b2 is IC); } }
interface IC { void M(); } class A : IC { void IC.M() { Console.WriteLine("In class A"); } } class B1 : A { } class B2 : A, IC { } class Program { staticvoid Main() { List<IC> cs =new List<IC>(); cs.Add(new A()); cs.Add(new B1()); cs.Add(new B2()); foreach (IC c in cs) c.M(); } }
程序能够正常编译,运行结果是:
In class A
In class A
In class A
OH, MY GOD! 怎么效果又一样!难道B1跟B2真的没区别??我再把代码修改一下:
interface IC { void M(); } class A : IC { void IC.M() { Console.WriteLine("In class A"); } } class B1 : A { void IC.M() { Console.WriteLine("In class B1"); } } class B2 : A, IC { void IC.M() { Console.WriteLine("In class B2"); } }
Oh,代码无法编译,编译器发脾气了:
'B1.IC.M()': containing type does implement interface 'IC'
interface IC { void M(); } class A : IC { void IC.M() { Console.WriteLine("In class A"); } } class B1 : A { } class B2 : A, IC { void IC.M() { Console.WriteLine("In class B2"); } } class Program { staticvoid Main() { List<IC> cs =new List<IC>(); cs.Add(new A()); cs.Add(new B1()); cs.Add(new B2()); foreach (IC c in cs) c.M(); } }
interface IC { void M(); } class A : IC { void IC.M() { this.M(); } publicvirtualvoid M() { Console.WriteLine("In class A"); } } class B1 : A { publicoverridevoid M() { Console.WriteLine("In class B1"); } } class B2 : A, IC { publicoverridevoid M() { Console.WriteLine("In class B2"); } } class Program { staticvoid Main() { List<IC> cs =new List<IC>(); cs.Add(new A()); cs.Add(new B1()); cs.Add(new B2()); foreach (IC c in cs) c.M(); } }
class Program { staticvoid Main() { List<A> ace =new List<A>(); ace.Add(new A()); ace.Add(new B1()); ace.Add(new B2()); foreach (A a in ace) a.M(); } }