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