抽象类中未实现的构造函数

时间:2016-05-13 15:02:01

标签: c#

我看到一些abstract基类.NET提供了,我完全失去了构造函数和虚方法定义的方式。例如,请参阅System.ComponentModel.DataAnnotations.ValidationAttribute基类:

public abstract class ValidationAttribute : Attribute
{
    // Summary:
    //     Initializes a new instance of the System.ComponentModel.DataAnnotations.ValidationAttribute
    //     class.
    protected ValidationAttribute();
    ...
    protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
}

但我不能在自己的课堂上这样做:

public abstract class MyClass
{
    protected MyClass();      
}
  

MyClass.MyClass()必须声明一个正文,因为它没有标记为abstract,extern或partial

我无法标记abstract

  

修饰符摘要对此项目无效

我没有特定需要MyClassValidationAttribute.NET中的其他基类类似。我只是想知道他们是如何在运行时编译的。

2 个答案:

答案 0 :(得分:6)

您没有查看ValidationAttribute的代码,而是查看其元数据。

actual constructor看起来像

protected ValidationAttribute()
    : this(() => DataAnnotationsResources.ValidationAttribute_ValidationError) {
}

答案 1 :(得分:0)

宣布一个身体。

public abstract class MyClass
{
    protected MyClass(){}      
}

这就是他们所做的。 https://github.com/Microsoft/referencesource/blob/master/System.ComponentModel.DataAnnotations/DataAnnotations/ValidationAttribute.cs