昨天我问了这个问题并得到了很多好的答案,只是我刚才意识到我的问题是错的,在这里我想重新解释一下。
我有这个界面
public interface IFoo<T>
{
T Value();
}
有了这个成员
public class Bar : IFoo<string>
{
string Value(){return "test";}
}
public class Bar2 : IFoo<int>
{
int Value(){return "1";}
}
这很好用,但现在我想创建一个具有可以是Bar或Bar2属性的类,所以就像这样
public class Test
{
IFoo test;
}
只有这样才能编译,因为Ifoo需要具有泛型类型。只有我事先不知道我是否会使用Bar2或Bar。
我希望我解释得很好,但如果没有,我会尽力让它更清楚。
释
我正在尝试(仅为了好玩)创建一个Dicom api(医学成像等)。 dicom标准的一部分是ValueRepresentations(VR)。这些类型用于存储图像的(元)信息。
这样的VR是例如:AgeString,Date,UnsignedShort,SequenceOfItems。
对于所有这些VR,我想要一些所有必须实现的方法(编码等)。但我都希望他们能够存储价值。无论是Int,还是DateTime或String,都不应该放在接口中?
答案 0 :(得分:4)
您还必须使您的Test类具有通用性:
public class Test<T>
{
IFoo<T> test;
}
答案 1 :(得分:1)
您希望以相同的方式使用两个不同的类,但您可以让它们实现不同的接口(不同的类型参数)。为什么呢?
您是否真的需要严格指定方法的返回值是什么类型?您将如何处理Test类中的不同返回类型?想一想,你可能会意识到它足以返回一个物体。否则,您还需要使Test类具有通用性。
最诚挚的问候 Oliver Hanappi
答案 2 :(得分:1)
您总是可以创建一般界面,方法与IEnumerable<T>
和IEnumerable
相同。
public interface IFoo
{
object Value();
}
实施
public class Bar : IFoo<string>, IFoo
{
public string Value(){return "test";}
object IFoo.Value(){return Value();}
}
public class Bar2 : IFoo<int>, IFoo
{
public int Value(){return 1;}
object IFoo.Value(){return Value();}
}
测试
IFoo b = new Bar();
IFoo b2 = new Bar2();
Console.WriteLine(b.Value());
Console.WriteLine(b2.Value());