原文:
1.在msdn上面對new()解釋說到是where字句的建構函式約束,帶有new()約束的任何型別都必須有可訪問的無參建構函式,正常來說c#建立的類預設都有乙個無參的建構函式,即使你沒有寫,但是如果你寫了乙個有引數的建構函式後,那麼就沒有預設無參的那個了,就需要自己手動寫乙個。
還是拿前兩天的國籍那個舉個例子:
/// /// 國籍的介面
///
public inte***ce inationality
string getnationality();
}
2.國籍的介面不用改變還是這個,繼承此介面的類稍微修改了一下,為每個類增加乙個構造方法,改造如下:
/// /// 中國人
///
public class chinese : inationality
private string _nationality;
public string nationality
}public string getnationality()
}/// /// 美國人
///
public class american : inationality
private string _nationality;
public string nationality
}public string getnationality()
}
3.其實變動也不大,泛型類也沒有修改,但是會報錯,在建立例項化物件的地方,如下:
/// ///
///
////// 由於此處有new()的約束,所以編譯器編譯的時候無法通過,那麼就將new()去掉,
/// 或者為繼承inationality的類增加public型別的無參建構函式
///
public class printnationalitywhere t : inationality, new()
", item.getnationality()));
}}
4.要解決上面的問題,就是給繼承inationality的介面的每個類都增加乙個無參的public型的構造方法,或者,將派生類後面的new()去掉。這樣的話,當例項化泛型類的時候就不會有問題了。
上面寫那麼多也是舉乙個小例子,其實msdn說的很明白,就是where字句後面有new()約束的話,t型別必須有公有的無參的建構函式。
C 中的where泛型約束
c 中的where泛型約束 這個關於泛型約束 的東西我看了幾天了。一直沒打看懂,我的領悟能力有點差,剛才突然明白了一點,泛型約束 的意思就是說 類的泛型,只能是where 字句後面所寫的介面或類。這麼說好像也有點不大明白,舉個例子。我有乙個介面,如下 1 2 國籍的介面 3 4public inte...
C 中的where泛型約束
這個關於泛型約束 的東西我看了幾天了。一直沒打看懂,我的領悟能力有點差,剛才突然明白了一點,泛型約束 的意思就是說 類的泛型,只能是where 字句後面所寫的介面或類。這麼說好像也有點不大明白,舉個例子。我有乙個介面,如下 1 2 國籍的介面 3 4public inte ce inationali...
C 中的where泛型約束介紹
泛型約束的意思就是說 類的泛型,只能是where字句後面所寫的介面或類。這麼說好像也有點不大明白,舉個例子。我有乙個介面,如下 複製 如下 國籍的介面 public inte ce inationality string getnationality 然後該介面有兩個實現,如下 複製 如下 中國人 ...