我已经看到了类似的问题并得到了回答,但我仍然在努力完成我的简单实施。我希望能够返回具有不同返回类型的类属性。然后我希望能够在一个集合中交替使用它们。
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属性。
任何建议或意见表示赞赏。
由于
答案 0 :(得分:1)
试一试。
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)
}