Luc*_*ano 7 c# polymorphism design-patterns
我想创建一个可以在属性中使用不同类型值的类.我正在尝试使用多态,但我还没有学习如何正确地做到这一点,因此我的建议请求.
我有一个基类和两个继承它的类:
public abstract class BaseClass
{
public string Name { get; set; }
public Unit Unit { get; set; }
}
public class DerivedClassFloat : BaseClass
{
public float Value { get; set; }
public override string ToString()
{
return Value.ToString();
}
}
public class DerivedClassString : BaseClass
{
public string Value { get; set; }
public override string ToString()
{
return Value;
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,我可以创建一个List并添加不同的专用子类.当我需要更改列表中项目的值时,我的问题出现了:
foreach (var item in ListOfBaseClasses)
{
if(item is DerivedClassFloat)
((DerivedClassFloat) item).Value = float.NaN;
if (item is DerivedClassString)
((DerivedClassString) item).Value = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
根据我所读到的,这看起来像代码味道.有没有更好的方法来根据我尝试分配的类型访问派生类的value属性?
当你想根据值创建正确的子类时呢?
BaseClass newClass = null;
if (phenotype is DerivedClassFloat)
newClass = new DerivedClassFloat(){Value = 12.2};
if (phenotype is DerivedClassString)
newClass = new DerivedClassString(){Value = "Hello"};
Run Code Online (Sandbox Code Playgroud)
我读过有关覆盖虚拟方法的内容,但是如果我想处理该值,而不是添加或更改它,那就有效...也许我错过了什么?
我应该更加具体,道歉,我不习惯在这个伟大的网站上发帖提问.
我需要一个由属性列表组成的属性.每个属性都有一个名称和一个值,但值可以是不同的类型.例如:
public class Organism
{
public string Name { get; set; }
public List<Attribute> Attributes { get; set; }
}
public class Attribute
{
public string AttributeName { get; set; }
public object AttributeValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
对于给定的生物,我可以有几个属性持有不同的值类型.我想避免使用对象类型,这样我就不必转换为正确的类型.我虽然属性多态性是优雅地处理这种情况的解决方案,但后来我发现自己使用If ..然后,这似乎与首先铸造没有太大不同.