簡體   English   中英

通用類和約束

[英]Generic class and Constraint

我正在使用泛型類和約束。 以下是我的課程。

public class GenericList<T> where T : new()
    {

        private Node head;

        // constructor 
        public GenericList()
        {
            head = null;
        }

    }

當我用整數創建對象時,它工作正常

GenericList<int> list = new GenericList<int>();

但是當我嘗試使用字符串時,它給了我以下編譯時錯誤。

GenericList<string> list1 = new GenericList<string>();

為了在通用類型或方法“ GenericTest.GenericList”中將其用作參數“ T”,“ string”必須是具有公共無參數構造函數的非抽象類型,當我像其他自定義類一樣傳遞引用參數時,它也可以正常工作。

字符串有什么問題?

字符串類沒有公共的無參數構造函數 ..這就是為什么new()約束不適用於它。

閱讀關於類型參數的約束(《 C#編程指南》)

其中T:new()

類型參數必須具有公共的無參數構造函數。 與其他約束一起使用時,必須最后指定new()約束。

String類型具有公共的無參數構造函數是沒有意義的,因為String不可變的 ,這意味着如果String具有此構造函數,則它將必須創建一個空的字符串對象,而這只是愚蠢的,因為在創建后您無法更改它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM