具有相同接口但属性的类型不同的类

ibi*_*iza 0 .net c# types interface

我想有这样的设计:

public interface IDifferentTypes
{
}

public class IntegerType : IDifferentTypes
{
    public int value { get; set; }
}

public class StringType : IDifferentTypes
{
    public string value { get; set; }
}

public class DateTimeType : IDifferentTypes
{
    public DateTime value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是在界面中定义了属性"value".

所以我可以这样说:

IDifferentTypes someInt = GetSomeInt(); // GetSomeInt() returns a IntegerType object
Assert.AreEqual(5, someInt.value);

IDifferentTypes someString = GetSomeString(); // GetSomeString() returns a StringType object
Assert.AreEqual("ok", someString.value);
Run Code Online (Sandbox Code Playgroud)

问题是每种实现的值的类型是不同的,处理它的最佳方法是什么?

Gra*_*mas 9

您可以定义一个通用接口(但它必须是一个属性,或者更严格来说,它不能是一个字段):

public interface IHasValue<T> {
  T Value { get; }
}
Run Code Online (Sandbox Code Playgroud)

T类型,占位符在哪里,如果你愿意,你可以做:

public class HasStringValue : IHasValue<string> {
  public string Value { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)


Luk*_*keH 5

如果可以,请使用泛型:

var someInt = GetSomeInt();
Assert.AreEqual(5, someInt.Value);

var someString = GetSomeString();
Assert.AreEqual("ok", someString.Value);

// ...

public interface IDifferentTypes<T>
{
    T Value { get; set; }
}

public class IntegerType : IDifferentTypes<int>
{
    public int Value { get; set; }
}

public class StringType : IDifferentTypes<string>
{
    public string Value { get; set; }
}

public class DateTimeType : IDifferentTypes<DateTime>
{
    public DateTime Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)