簡體   English   中英

C#創建類實例語法?

[英]C# creating class instance syntax?

我對編碼還很陌生,總是使用“ classname instancename = new classname()”創建實例,但是今天我發現以下代碼無法使用,因此無法使用此語法。 我的問題是第五行會發生什么。 非常感謝你。

private void _InsertIntoBinarySearchTree(ref Element<K> p , K key)
{
    if (p == null)
    {
        p = new Element<K>();//what happens here?
        p.key = key;
    }
    else
    {
        if (p.key.CompareTo(key) > 0)
        {
            _InsertIntoBinarySearchTree(ref p.left, key);
        }
        else if (p.key.CompareTo(key) < 0)
        {
            _InsertIntoBinarySearchTree(ref p.right, key);
        }
        else
        {
            throw new Exception("");
        }
    }
}

p如果通過方法中的ref進行操作,則您所做的任何事情都會在方法之外受到影響; 這意味着當您為它分配newp ,方法參數p的調用者也會被重新分配。

您要說明它是參數中的Element<K>類型,因此p必須符合該類型。

在有問題的方法行中,您可以通過以下方式將p重新分配給new Element<K>

p = new Element<K>();//what happens here?

就如何使用它而言,它與p = new Element()相同,但是由於Element類型需要通用類型引用(可以是K或其他任何值),因此您還需要使用相同的方式重新分配它類型K傳遞給該方法。 因為我們不確定何時調用K類型。

您不使用var p =...Element<K> p =..的原因是因為參數中已經將p聲明為該類型。 這是一個ref參數,因此您可以按照所述重新分配它。

該方法的調用者可能僅作為示例是這樣的:

Element<string> p = null;
string k = "someKey";
_InsertIntoBinarySearchTree(ref p, k); //Here p goes into the method as ref; the method performs the null check and sets p as new Element<string>()

希望這可以幫助...

首先,您不能為變量p使用類型說明符,因為您沒有聲明新變量p ,而是為現有變量分配了一個值。 也可以看看:

int myVal;
myVal = 5;

其次,好吧,您要分配給變量p 因此,它將使用新值(在本例中為new Element<K>()覆蓋之前的任何內容。 從技術上講,它可以是任何值,但是由於您調用了new ,所以它將創建一個新變量並調用適當的構造函數。 不必擔心內存泄漏-C#將跟蹤孤立的引用並為您清理它們。

最后,由於p是作為ref傳遞到您的方法的,因此將其賦值將在方法的本地范圍內編輯變量p以及從調用范圍傳遞給您的方法的引用,因此為什么將p用作在這里輸出。

您會注意到第一行的方法簽名中p變量的類是Element<K> 暫時忽略ref傳遞的代碼,它類似於以下代碼。

Element<K> p = new Element<K>();

元素是類型K的泛型類。K是要排序的對象的類型。 之所以通用,是因為您可以選擇要排序的元素的類型。 因此,例如,如果您要對汽車進行分類。

Element<Car> c = new Element<Car>();

在通用Element<K>類的定義內定義了允許哪種類型的邏輯。

暫無
暫無

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

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