-
不能將屬性以ref或out的方式傳遞
看上去屬性和字段差不多,可是屬性本質上是個方法,并不是真正指向一個内存位置,所以不能像字段那樣能以ref或out方式傳遞。
匿名類型的屬性是衹讀的
原生的值類型調用ToString方法是不會裝箱的
比較"Age = " + 3.ToString()和"Age = " + 3,前者要比後者高效,因爲後者默認會裝箱。所以值類型涉及字符串操作時,應該總是使用ToString方法
類型的協變和逆變
衹有接口和委托才能聲明這兩個特性,汎型類是不支持的(出於類型安全的考慮)。
協變用out來修飾,針對的是返回值,潛臺詞是:如果能返回父類,自然也能返回子類。
// Covariance.
IEnumerable<string> strings = new List<string>();
IEnumerable<object> objects = strings;
逆變用in來修飾,針對的是參數,潛臺詞是:如果能傳入父類,自然也能傳入子類。
// Contravariant.
IComparer<object> objects = objectComparer;
IComparer<string> strings = objects;
dynamic類型可以隱式轉換爲其它類型,object則不行
如:dynamic d = 1; int i = d;
編譯器認爲dynamic上的任何操作都是合法的
时间: 2024-10-14 22:02:18