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

C# 抽象类中未实现的构造函数,c#,C#,我看到了一些abstract基类.NET提供的,我完全不知道它们的构造函数和虚拟方法是如何定义的。例如,请参见System.ComponentModel.DataAnnotations.ValidationAttribute基类: public abstract class ValidationAttribute : Attribute { // Summary: // Initializes a new instance of the System.ComponentM

我看到了一些
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()必须声明一个主体,因为它没有标记为抽象、外部或部分

我也不能把它标记为抽象的:

修饰符摘要对此项无效


我不需要像
ValidationAttribute
.NET
中的其他基类那样使用
MyClass
。我只是想知道它们是如何在运行时编译的。

您不是在查看ValidationAttribute的代码,而是在查看它的元数据

看起来

protected ValidationAttribute()
    : this(() => DataAnnotationsResources.ValidationAttribute_ValidationError) {
}
宣布一个机构

public abstract class MyClass
{
    protected MyClass(){}      
}
他们就是这样做的。

您看到的是元数据、类的定义,而不是真正的实现。您是如何获得
ValidationAttribute
的源代码的,是否使用了反编译器?看起来方法主体被删除了,这里是更真实的版本。ValidationAttribute的代码也无效-如果您查看,您将看到所有构造函数都有一个主体。我怀疑您看到的是元数据或错误的反编译器结果,而不是实际的源代码。@DStanley是visual studio中的F12