这可能是一个关于基础设计的问题。
我想对一个神秘对象执行操作,只要它实现了我的接口(interface)IMyInterface。我希望接口(interface)定义的方法之一返回神秘对象的实例,所以...
IMyInterface
{
object GetInstance();
}
public class MysteryObject : IMYInterface
}
public object GetInstance()
{
MysteryObject instance = new MysteryObject();
return instance;
}
}
但这会导致不必要的“对象”类型以及与之相关的开销。 C# 通过使用泛型类型专门消除了这种开销。做这样的事情是理想的:
IMyInterface
{
T GetInstance<T>();
}
public class MysteryObject : IMYInterface
}
public MysteryObject GetInstance<MysteryObject>()
{
MysteryObject instance = new MysteryObject();
return instance;
}
}
我知道第二个例子行不通。我知道语法错误。 ..但我想知道是否有更好的方法来要求实现 IMyInterface 的对象返回其自身类型的实例。
我的例子有点奇怪,但我想大多数人都能理解这种情绪。奇怪的是,我发现这方面的例子或问题很少。
最佳答案
你可以让返回类型IMyInterface
:
public interface IMyInterface
{
IMyInterface GetInstance();
}
public class MysteryObject : IMyInterface
{
public IMyInterface GetInstance()
{
MysteryObject instance = new MysteryObject();
return instance;
}
}
或者使用泛型:
public interface IMyInterface<T>
{
T GetInstance();
}
public class MysteryObject : IMyInterface<MysteryObject>
{
public MysteryObject GetInstance()
{
MysteryObject instance = new MysteryObject();
return instance;
}
}
如果您希望通用参数是 IMyInterface 类型,您可以像这样添加约束:
public interface IMyInterface<T>
where T : IMyInterface<T>
{
T GetInstance();
}
更新
以下是一些示例用法,以了解这两个版本之间的区别:
返回接口(interface)
IMyInterface
:IMyInterface a = new MysteryObject().GetInstance(); // valid MysteryObject b = new MysteryObject().GetInstance();// invalid MysteryObject b = (MysteryObject)new MysteryObject().GetInstance(); // valid
从接口(interface)返回通用类型参数:
IMyInterface<MysteryObject> a = new MysteryObject().GetInstance(); //valid MysteryObject b = new MysteryObject().GetInstance(); //valid
关于c# - 声明对象类型的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44577827/