4

我已经看到类似的问题被问到并得到了回答,但我仍然在为我的简单实现而苦苦挣扎。我希望能够返回具有不同返回类型的类属性。然后我希望能够在一个集合中互换使用它们。

public ClassInt
{
public int Id { get; set; }
public string MyValue { get; set; }
}

public ClassString
{
public int  Id { get; set; }
public int  MyValue { get; set; }
}

因此,除了 MyValue 上的返回类型之外,这些类是相同的。这是我到目前为止所做的:

public interface IBaseClass
{
    int Id { get; set; }
    object Value { get; set; }
}

public abstract class BaseClass <T> : IBaseClass
{
    public int Id { get; set; }
    public abstract T Value { get; set; }
}

public class ClassInt : BaseClass<int>
{
    private int _value;
    public override int Value
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;
        }
    }
}

public class ClaseString : BaseClass<string>
{
    private string _value;
    public override string Value
    {
        get
        {
            return String.Format(“Hello: {0}”, _value);
        }
        set
        {
            _value = value;
        }
    }
}

要显示值:

List<IBaseClass> MyObjects = new List<IBaseClass>();

MyObjects.Add(new ClassString() { Id = 1, Name = "value 1", Value = "F1 String 1" });
MyObjects.Add(new ClassInt() { Id = 2, Name = "value 2", Value = 500 });

IBaseClass f0 = MyObjects[0];
IBaseClass f1 = MyObjects[1];

现在的问题是 f0 和 f1 没有暴露 Value 属性。

任何建议或意见表示赞赏。

谢谢

4

1 回答 1

2

试试这个。

public interface IBaseClass
{
    int Id { get; set; }
    object Value { get; set; }
}

public abstract class BaseClass<T> : IBaseClass
{
    public int Id { get; set; }

    public T Value { get; set; }

    object IBaseClass.Value
    {
        get { return Value; }
        set
        {
            // put some type checking and error handling here
            Value = (T)value;
        }
    }
}

public class ClassInt : BaseClass<int>
{
    // Properties specific for ClassInt, if you have any
    // (otherwise you don't even need this class anymore)
}
于 2013-10-11T13:20:09.257 回答