繁体   English   中英

使用继承的类更改属性类型

[英]changing property type with inherited classes

我已经看到了类似的问题并得到了回答,但我仍然在努力完成我的简单实现。 我希望能够返回具有不同返回类型的类属性。 然后我希望能够在一个集合中交替使用它们。

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属性。

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

谢谢

试一试。

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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM