直接上代码吧 interface Sample1
{
void say();
}
interface Sample2
{
void say();
}
interface Sample3 : Sample1, Sample2
{
void func3();
} class B : Sample3
{ }以上接口Sample3继承自接口Sample1,Sample2
而Sample1,Sample2中有同名的方法say()
则在实现Sample3的类B中应该怎么样才能区别Sample1,Sample2?
或者直接能在Sample3的定义中区别么?
{
void say();
}
interface Sample2
{
void say();
}
interface Sample3 : Sample1, Sample2
{
void func3();
} class B : Sample3
{ }以上接口Sample3继承自接口Sample1,Sample2
而Sample1,Sample2中有同名的方法say()
则在实现Sample3的类B中应该怎么样才能区别Sample1,Sample2?
或者直接能在Sample3的定义中区别么?
{
void say();
}
interface Sample2
{
void say();
}
interface Sample3 : Sample1, Sample2
{
void func3();
} class B : Sample3
{
void Sample1.say()
{
Console.WriteLine("接口1中的方法");
} void Sample2.say()
{
Console.WriteLine("接口2中的方法");
} public void func3()
{
Console.WriteLine("接口3中的方法");
}
}
修正下我的代码:
interface Sample1
{
void say();
}
interface Sample2
{
void say();
}
interface Sample3 : Sample1, Sample2
{
void func3();
}
class B : Sample3
{
void Sample1.say() { Console.WriteLine("Sample1.say()"); }
void Sample2.say() { Console.WriteLine("Sample2.say()"); }
public void func3() { }
}
还有个问题就是,如果我想
Sample3 s3 = new B();
而直接 s3.say()显然是不行的那如果再Sample3的接口定义中区分不同的继承的呢?
public void Test()
{
Entity e = new Entity();
Sample1 s1 = e as Sample1;
Sample2 s2 = e as Sample2;
s1.say();
s2.say();
e.func3();
}interface Sample1
{
void say();
}
interface Sample2
{
void say();
}
interface Sample3 : Sample1, Sample2
{
void func3();
}class Entity : Sample3
{
public void func3()
{
Console.WriteLine("fun3");
} public void say()
{
Console.WriteLine("say");
}
}
接口关键是描述行为和属性。比如你有2个接口:
interface IFlyable
{
void GetReady();
void Fly();
}interface ITravelable
{
void GetReady();
void Run
}都具有做好准备的方法,那么,按照面向对象的设计,你是可以忽略细节,直接调用GetReady的,当然,如果你为了区分Fly的准备和Travel的准备,可以将2个接口显示实现。MSDN上写不推荐显示实现接口,因为其子类无法继承这个接口的实现。或许,你可以将类这样设计:public void Test()
{
Entity e = new Entity(new Entity1(), new Entity2());
e.S1.say();
e.S2.say();
e.func3();
}interface Sample1
{
void say();
}
interface Sample2
{
void say();
}interface Sample3
{
void func3();
}public class Entity1 : Sample1
{
public void say() { Console.WriteLine("sample1.say");}
}public class Entity2 : Sample2
{
public void say() { Console.WriteLine("sample1.say"); }
}class Entity : Sample3
{ public Sample1 S1;
public Sample2 S2; public Entity(Sample1 s1,Sample2 s2)
{
this.S1 =s1;
this.S2 = s2;
} public void func3()
{
Console.WriteLine("fun3");
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Sample3 b = new B();
b.say();
}
}
interface Sample1
{
void say();
}
interface Sample2
{
void say();
}
interface Sample3 : Sample1, Sample2
{
void say();
void func3();
}
class B : Sample3
{
void Sample1.say() { Console.WriteLine("Sample1.say()"); }
void Sample2.say() { Console.WriteLine("Sample2.say()"); }
public void say() { Console.WriteLine("say()"); }
public void func3() { }
}
}
要么在 Sample3 里面定义 say(),这样这个 say() 会隐藏 Sample1 Sample2 里面的 say()要么显式将一个 Sample3 类型转换成 Sample1 或者 Sample2:
Sample3 b = new B();
Sample1 b1 = b as Sample1;
b1.say();