C# 使用继承的类更改属性类型
我见过类似的问题被问到和回答,但我仍然在为我的简单实现而挣扎。我希望能够返回具有不同返回类型的类属性。然后我希望能够在一个集合中互换使用它们C# 使用继承的类更改属性类型,c#,C#,我见过类似的问题被问到和回答,但我仍然在为我的简单实现而挣扎。我希望能够返回具有不同返回类型的类属性。然后我希望能够在一个集合中互换使用它们 public ClassInt { public int Id { get; set; } public string MyValue { get; set; } } public ClassString { public int Id { get; set; } public int MyValue { get; set; } } 因此,除了My
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;
}
}
}
公共接口IBaseClass
{
int Id{get;set;}
对象值{get;set;}
}
公共抽象类基类:IBaseClass
{
公共int Id{get;set;}
公共抽象T值{get;set;}
}
公共类ClassInt:基类
{
私有整数值;
公共覆盖int值
{
得到
{
返回_值;
}
设置
{
_价值=价值;
}
}
}
公共类类别字符串:基类
{
私有字符串_值;
公共重写字符串值
{
得到
{
返回String.Format(“Hello:{0}”,_值);
}
设置
{
_价值=价值;
}
}
}
要显示值,请执行以下操作:
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];
List MyObjects=new List();
添加(新的ClassString(){Id=1,Name=“value 1”,value=“F1 String 1”});
Add(new ClassInt(){Id=2,Name=“value 2”,value=500});
IBaseClass f0=MyObject[0];
IBaseClass f1=MyObject[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)
}
公共接口IBaseClass
{
int Id{get;set;}
对象值{get;set;}
}
公共抽象类基类:IBaseClass
{
公共int Id{get;set;}
公共T值{get;set;}
对象类。值
{
获取{返回值;}
设置
{
//在这里放置一些类型检查和错误处理
值=(T)值;
}
}
}
公共类ClassInt:基类
{
//ClassInt的特定属性(如果有)
//(否则,您甚至不再需要此类)
}
使您的IBaseClass
通用:IBaseClass
并将对象值{get;set;}
更改为T值{get;set;}
?在处理IBaseClass对象时是否需要设置该值?这并不是很有意义:D@CodeCaster当前位置他不能那样做,因为他想使用List@Jan你说得对。然后再看:“不清楚在不知道数据元素类型的情况下如何使用数据元素集合……”。好的,我看到了您在这里删除I->base->concrete继承并使抽象类和继承相互分离的做法。这是一个让它工作的“技巧”还是一个有效的OO方法?我问,因为在我看来,基类或接口可能会改变,而另一个可能不知道。此外,在具体类中使用对象需要使用手动验证,我认为这应该由系统来完成,如果可能的话。Ok使用一些具体类和删除的类来测试它,这些类没有任何实现,所有的工作都很好。一个很好的例子,两个人的想法比一个人好,批评导致更好的结果结果。我对我编辑过的回复也很满意。