問題:
鑒于我有以下內容:
using System;
public class BaseClass{
public static Type TypeOfThis => //Somehow get the type of the inheriting class?
public static void HelloWorld() => Console.WriteLine($"Hello world, I am {TypeOfThis.Name}");
}
public class InheritingClass:BaseClass{}
如何參考繼承類的型別?
GetType需要一個我們沒有的參考,因為我們是靜態作業的。
uj5u.com熱心網友回復:
簡單的答案是……你不能。一般。
靜態屬性不會被繼承。當從繼承類呼叫靜態方法時,它總是像呼叫父類一樣呼叫該方法。
但是,此問題的解決方法是泛型。
由于我們需要一種方法來告訴我們的靜態屬性在運行時使用某個值來確定型別,因此我們可以簡單地使用泛型傳遞它。
修改我們的代碼以引入泛型將允許我們參考 T,同時在派生(繼承)類中定義 T。
using System;
public class BaseClass<T>{
public static Type TypeOfThis => typeof(T);
public static void HelloWorld() => Console.WriteLine($"Hello world, I am {TypeOfThis.Name}");
}
public class InheritingClass:BaseClass<InheritingClass>{}
需要注意的是,我們不能再使用我們的 BaseClass,因為我們總是需要定義 T。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/511347.html
標籤:C#仿制药反射静止的
上一篇:Typescript:此條件將始終回傳'false',因為型別'Type'和'number'沒有重疊
下一篇:使用洗掉和泛型轉換型別的簡潔方法
