C#继承类的无参构造函数

3

希望这是一个简单的问题。

我需要序列化一个继承自 'PropertyDescriptor' 的 iProperty 类。为了实现这一点,iProperty 需要一个无参数构造函数,而基类没有这样的构造函数。如果我尝试添加一个构造函数,我会被告知基类不包含接受 0 个参数的方法,这是正确的。

我该如何解决这个问题。

谢谢。

示例:

   public class iProperty : PropertyDescriptor
    {
        private string propName;
        private object propValue;

        // Need Parameterless Construtor ?

        public iProperty(string pName, object pValue)
            : base(pName, new Attribute[] { })
        {
            propName = pName;
            propValue = pValue;

        }
    }

我认为我们需要查看PropertyDescriptor类(或者至少是它的构造函数)。 - undefined
你可能需要为iProperty创建一个可序列化的包装器,其中包含一个名为GetiProperty或等效的方法,该方法根据序列化信息创建iProperty对象。无法绕过构造函数的要求。 - undefined
1
请展示您的iProperty无参数构造函数。这个构造函数可以使用默认值调用现有的PropertyDescriptor构造函数之一。 - undefined
如果我将iProperty作为一个外部类来进行序列化,那么我应该如何将这个类集成到上述代码中呢?谢谢。 - undefined
你可以使用组合而不是继承,并用属性'[XmlIgnore]'标记PropertyDescriptor字段。或者将PropertyDescriptor改为接口。或者为PropertyDescriptor创建一个无参数的构造函数。这真的取决于你的架构和限制。 - undefined
2个回答

7
public class iProperty : PropertyDescriptor
{
    private string propName;
    private object propValue;

    // Need Parameterless Construtor ?
    public iProperty()
        : base("placeholder", new Attribute[] { })
    {
    }

    public iProperty(string pName, object pValue)
        : base(pName, new Attribute[] { })
    {
        propName = pName;
        propValue = pValue;

    }
}

谢谢,我已经尝试过了,它报告了“反射类型时出现错误”。 - undefined

3
你可以创建一个无参构造函数,但你仍然需要调用基类的构造函数。
public class iProperty : PropertyDescriptor
{

    public iProperty()
        : base(someDefaults)
    {
    }
}

你也可以在基类中实现一个无参数的构造函数,并将其设置为protected。这样除了派生类外,没有人可以调用它。

因为导致序列化时出现异常,所以无法正常工作 - '反射类型错误' - undefined
如何为 dotnet 中的基类添加构造函数? - undefined
我以为PropertyDescription是你的类。如果它是dotnets,那么你不能添加一个构造函数。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接