C 中的where泛型約束中的new

2021-06-19 15:28:01 字數 1277 閱讀 8830

原文:

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 然後該介面有兩個實現,如下 複製 如下 中國人 ...