让多个接口对应同一个对象,并让这个对象实现多个接口,同时通每个接口对应上这个对象,对象只能有一个。
也就是说通过多个接口实现同一个对象。
就像组件一样。
也就是说通过多个接口实现同一个对象。
就像组件一样。
解决方案 »
- 如何遍历一个文件的里面的所有的文件的,我想拿到所有的文件的名字
- 大哥们 酒店客房预定文档 谁做过呀,数据库有人弄过没,帮忙讨论下谢了
- 如何旋转 emf 矢量图
- 关于自己的类数组实现按字符串检索
- 请问nhibernate,可以跟myeclipse里的hibernate那样自动生成实体类吗
- webservice里不能Kill进程吗
- 很多电子书下载网站,要的快进哦!!!
- 怪问题,VS.NET的问题,什么都不能新键的问题。
- winfrom程序,在真机上出现一下问题,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
- [紧急醒目]COMBBOX的问题
- 关于继承添加事件的问题???
- 文件拷贝后变成这样了(请各位支支招)
对于你说的问题,
1:一个对象实现多个接口;
2:多个接口对应一个对象;
这都完全没有问题,看:public interface IA
{
void FooA();
}
public interface IB
{
void FooB();
}
public class TIAB:IA,IB
{
public void FooA();
public void FooB();
}public void Main()
{
//这里都OK
TIAB t = new TIAB();
IA ia = t as IA;
IB ib = t as IB;
ia.FooA();
ib.FooB();
t.FooA();
t.FooB();
}关键的问题在于你说的只“实现一个”,是否是指在系统范围内只能存在一个TIAB类的对象,如果是这样的话,参考设计模式中的单实例(Singleton)。
{
void FooA();
}
public interface IB
{
void FooB();
}
public class TIAB : IA, IB
{
public void FooA()
{
Console.WriteLine("FOOA");
}
public void FooB()
{
Console.WriteLine("FOOB");
}
private TIAB() { } //私有构造函数,在外部无法构造新的TIAB对象 private static TIAB single = new TIAB(); public static TIAB GetTIAB() //唯一取得TIAB对象的方法就是这个,它返回的永远是single
{
return single;
}
}class Program
{
static void Main(string[] args)
{
//这里都OK
TIAB t = TIAB.GetTIAB();
IA ia = t as IA;
IB ib = t as IB;
ia.FooA();
ib.FooB();
t.FooA();
t.FooB(); IB ib2 = ia as IB; //注意这里:可以通过接口查询其它接口,甚至对象。
ib2.FooB(); TIAB t2 = ib as TIAB;
t2.FooA();
t2.FooB(); Console.ReadKey();
}
}
//程序输出结果:
//FOOA
//FOOB
//FOOA
//FOOB
//FOOB
//FOOA
//FOOB
显示实现啊
比如
public interface IA
{
void funcAB();
}public interface IB
{
void funcAB();
}public class AB:IA,IB
{
public IA.funcAB()
{
}
public IB.funcAB()
{
}
}
public interface IA
{
void funcAB();
} public interface IB
{
void funcAB();
} public class AB:IA,IB
{
public IA.funcAB()
{
}
public IB.funcAB()
{
}
}
1:如果IA和IB的方法funcAB()是一样的,你也可以无需显式的声明。比如:
public class AB:IA,IB
{
public void funcAB(){}
}
无论你通过IA还是IB接口调用funcAB都会执行这一个方法;2:我不清楚是不是编译器的原因。至少在2008中,对于显式的实现接口的情况不能使用public关键字,而必须保留为空,系统自动保证它为public。
即:楼上的写的
public IA.funcAB()
是无法通过编译的,要写成
IA.funcAB()
不过这里还有一个小小的错误,没写返回值,这样:
void IA.funcAB(){}
就可以了。
的方法内容要实现不同的操作,就是说两个接口有不同的操作,
你引用的那个,他copy的我的,我没在vs里面写,就是随便写的,确实显示实现的时候不能写public,而且,我忘了写void了
{
Console.WriteLine("FaceA welcome A!");
} public void printB()
{
Console.WriteLine("FaceB welcome B!");
} void FaceA.print()
{////显式调用
Console.WriteLine("相同的方法,FaceA!");
} void FaceB.print()
{//显式调用
Console.WriteLine("相同的方法,FaceB!");
} private Test() { } public static Test instance = null;
public static readonly object padlock = new object(); public static Test getObject()
{
if (instance == null)
{
lock (padlock)
{
if (instance == null)
{
instance = new Test();
}
}
}
return instance;
}这是实现的内容。
下面是调用的方法:Test instance = Test.getObject(); instance.printA();
instance.printB(); FaceA IA = instance as FaceA;
FaceB IB = instance as FaceB; IA.printA();
IB.printB(); FaceB ib = IA as FaceB;
FaceA ia = IB as FaceA; ia.printA();
ib.printB(); ia.print();
ib.print(); Test test = IB as Test;
test.printA();
test.printB();在这里我想通过instance 直接调用下面两个方法
void FaceA.print()
{////显式调用
Console.WriteLine("相同的方法,FaceA!");
} void FaceB.print()
{//显式调用
Console.WriteLine("相同的方法,FaceB!");
}
请问需要怎么做?