我看到幾個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()必須聲明主體,因爲它不標記爲抽象,EXTERN或部分
我不能將其標記abstract
之一:
的修改抽象不適用於這個項目
我無特殊需要MyClass
要像ValidationAttribute
或其他基類中.NET
。我只是想知道他們是如何在運行時編譯的。
你看到的是元數據,類的定義,而不是真正的實現。 –
您如何獲得'ValidationAttribute'的源代碼,您是否使用過一些反編譯器?它看起來像方法體被刪除,這裏https://github.com/Microsoft/referencesource/blob/master/System.ComponentModel.DataAnnotations/DataAnnotations/ValidationAttribute.cs是它的更現實的版本。 – csharpfolk
「ValidationAttribute」的代碼無效 - 如果您查看[_actual_ source](http://referencesource.microsoft.com/System.ComponentModel.DataAnnotations/R/bf57007a2f61c388.html),您會看到所有構造函數有一個body。我懷疑你正在查看元數據或一個糟糕的反編譯器結果,而不是實際的源代碼。 –