从您的代码中,您似乎在问如何使用子类中的父类构造函数?
您可以像这样调用基本构造函数:
public ChildClass(string name, Feature extraFeature)
:base(name) //this initializes this class with the constructor of the base class
{
Features.Add(extraFeature); //this adds your extraFeature to the features-list.
}
尽管如此,我确实很难完全理解你的问题。例如; 如果这个额外的特性必须传递给 ChildClass 的构造函数,给你的父类一个 AddFeature 方法不是很好吗?
或者 ChildClass 具有额外的功能总是相同的,在这种情况下它不需要作为构造函数参数?
name 参数是类的名称,而功能列表实际上只是要调用的方法列表?如果是这样的话; 您是否考虑过使用反射?
编辑; 我对你的情况的看法:
public class FeatureObject
{
public String Name { get; private set; }
public Dictionary<String,String> Features { get; private set; }
public FeatureObject (string name)
{
Name = name;
Features = new Dictionary<String, String>();
Features.Add("Name",name);//just an example of a feature that all objects have
}
}
public class Fish: FeatureObject
{
public Color Color { get; private set; }
public Fish(String name, Color color)
:base(name) //initializes Name and Features as described in FeatureObject-class
{
Features.Add("Color", color.ToString());//Adds color to the features-dictionary
}
}
我仍然认为你可以更轻松地做到这一点。
例如,此方法将尝试返回对象中命名属性的字符串表示形式:
public static String GetPropertyValue(object o, String property)
{
try
{
return o.GetType().GetProperty(property).GetValue(o, null).ToString();
}
catch(Exception)
{
return null;
}
}
如果您在 Dictionary Objects 中有您的对象,您可以通过如下方法获取它们:
public static String GetPropertyValue(String objectName, String propertyName)
{
try
{
var o = Objects[objectName];
return GetPropertyValue(o, propertyName)
}
catch (Exception)
{
return null;
}
}