.Net Framework基本類型,如Int32,Int64,Boolean等。實現IConvertible接口,但這些類型的元數據不包含IConvertible接口中定義的方法(如ToByte,ToBoolean等)的實現。爲什麼.Net Framework基本類型不包含IConvertible方法的實現?
我想了解爲什麼基類型沒有方法實現,即使它們實現了IConvertible接口。任何人都可以請幫忙嗎?
.Net Framework基本類型,如Int32,Int64,Boolean等。實現IConvertible接口,但這些類型的元數據不包含IConvertible接口中定義的方法(如ToByte,ToBoolean等)的實現。爲什麼.Net Framework基本類型不包含IConvertible方法的實現?
我想了解爲什麼基類型沒有方法實現,即使它們實現了IConvertible接口。任何人都可以請幫忙嗎?
仔細查看documentation - Int32
implements IConvertible
explicitly。
當一個類/結構調用這些方法
var asConvertable = (IConvertible) 3; //boxing
var someByte = asConvertible.ToByte();
謝謝dcastro指出Int32明確實現了IConvertible。我現在明白了。謝謝。 – Raji 2014-11-25 12:30:30
這是一個救星,同時構建了一個針對netstandard和framework的netstandard庫。顯然它在netstandard版本中是明確的,但不在框架中(或者說我的編譯器)。 – gregsdennis 2017-06-26 08:06:17
Int32
和其他原始類型實現IConvertible
接口explicitly之前實現一個接口明確,你要投那個類型,其接口的實例。顯式接口實現意味着該方法不會出現在具體的類型公共方法中:您不能直接調用它,您需要先轉換到接口。
int x = 42;
IConvertible c = (IConvertible)x;
byte b = c.ToByte();
要明確實現的接口,不指定可進入等級,以及你與接口名稱前綴的方法名:
byte IConvertible.ToByte()
{
...
}
要訪問與反射的方法,你必須包括接口的全稱:
MethodInfo toByte =
typeof(int).GetMethod("System.IConvertible.ToByte",
BindingFlags.Instance | BindingFlags.NonPublic);
感謝Thomas的詳細解釋。 – Raji 2014-11-25 12:31:45
明確的接口實現方法需要找到BindingFlags.NonPublic。他們是私人的。 – 2014-11-24 00:31:23
「這些類型的元數據不包含...」是非常奇怪的說法,特別是沒有提及您使用的工具/您嘗試過的代碼。假設你已經閱讀[System.Int32](http://msdn.microsoft.com/en-us/library/system.int32(v = vs.110).aspx)文檔更好(也可能是重複)的問題應該是「如何在'Int32'的顯式實現的接口上獲取元數據,我的代碼......不顯示任何方法」。 – 2014-11-24 00:36:34