我试图通过在基类中使用一个函数来创建实现特定接口的属性列表来避免代码重复。
当我调用该函数时,它没有像我希望的那样工作。
在尝试调试时,我发现了以下我不明白的结果:
调用 GetType() 给出派生类型。 (这就是我想要的。)
但是,GetType().GetProperties() 只提供基类属性,而不提供 GetType() 返回的类型中的属性。
interface IParameter
{
string ParameterValue { get; }
}
class SearchBase
{
public string SearchName { get; set; }
protected List<IParameter> ListOfParameters()
{
// this gives me the derived type object of SearchOne
var type = GetType();
// this only gives me the base class properties of SearchBase
var typeProperteis = type.GetProperties();
// I want this to return a list of all the IParameter properties in the derived classes
return GetType().GetProperties().Where(p => typeof(IParameter).IsAssignableFrom(p.PropertyType)).Select(x => (IParameter)x).ToList();
}
}
class SearchOne : SearchBase
{
public IParameter Parameter1 { get; set; }
public IParameter Parameter2 { get; set; }
public IParameter Parameter3 { get; set; }
void DoSomthing()
{
var properties = ListOfParameters();
}
}
对我来说,这似乎与直觉相反,它会给我基类型的派生类型,但不会提供派生类型的属性。 (如果它只给了我两个示例中的基类,我可以理解,但我很困惑为什么每个示例都有一点。)
任何人都可以解释为什么它会这样吗?
任何人都可以解释如何获取派生类的属性,而不必将 ListOfParameters 函数复制/粘贴到每个派生类吗? (我最终会得到 80 多个派生类,因此希望获得基类的好处,以避免大量重复。)
请帮忙。
答案来自文档:Type.GetProperties Method 它说:
它返回所有公共实例和静态属性, 由当前 Type 对象表示的类型定义 以及 那些从其基本类型继承的。