[英]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
進行操作,則您所做的任何事情都會在方法之外受到影響; 這意味着當您為它分配new
的p
,方法參數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.