C# Get & Set:呼叫 set 屬性后,欄位是否也會更新?在同一個類中,應該使用屬性還是欄位?
public class Node<T>
{
private T _data;
private Node<T> _next;
public T Data { get ; set; }
public Node<T> Next { get; set; }
public Node(T Value)
{
// on debugging mode, the field _data is not updated when property Data is updated. Please see the attached screenshot.
// the field _next is not updated when property Next is udpated.
this.Data = Value; // or shall it be "this._data = Value;" or without this. ?
this.Next = null; // or shall it be "this._next = null;" or without this. ?
}
public Node()
{
Data = default(T);
Next = null;
}
}
/////////////////////////////
class LinkList<T> : IListDS<T>
{
private Node<T> head;
public LinkList()
{
head = null;
}
public void Add(T item)
{
Node<T> newNode = new Node<T>(item);
if (head == null)
{
head = newNode;
}
else
{
Node<T> temp = head;
while (temp.Next != null)
{
temp = temp.Next;
}
temp.Next = newNode;
}
}

uj5u.com熱心網友回復:
您正在使用自動實作的屬性:
public T Data { get ; set; }
public Node<T> Next { get; set; }
這基本上意味著編譯器創建了自己的支持欄位。它不會使用您手動創建的那些:
private T _data;
private Node<T> _next;
如果自動實作的屬性足以滿足您的需求(并且它們可能是),那么只需依賴這些:
public class Node<T>
{
public T Data { get ; set; }
public Node<T> Next { get; set; }
public Node(T Value)
{
this.Data = Value;
this.Next = null;
}
public Node()
{
Data = default(T);
Next = null;
}
}
如果您要使用手動實作的屬性,則不要使用此構造:
public T Data { get ; set; }
你會有更明確的東西:
private T _data;
public T Data
{
get { return _data; }
set { _data = value; }
}
這將允許您在這些屬性中放置額外的邏輯,例如引發屬性更改通知的事件或自動計算其他相關值等。但在大多數情況下,如果您只需要一個沒有額外邏輯的屬性,那么自動實作屬性使代碼更短、更干凈。
uj5u.com熱心網友回復:
不,不會。通過寫這個:
public class Node<T>
{
private T _data;
public T Data { get; set; }
}
您可以有效地創建兩個單獨的欄位 - 一個_data和另一個隱藏在 autoproperty 后面的欄位Data。
最有可能的是,您只是不需要前一個:
public class Node<T>
{
public T Data { get; set; }
}
或者,您可以將該_data欄位用作屬性后面的支持欄位:
public class Node<T>
{
private T _data;
public T Data { get => _data; set => _data = value; }
}
uj5u.com熱心網友回復:
如果你想使用 getter 和 setter,你需要為它們添加邏輯Data和Next。那看起來像這樣:
public T Data
{
get
{
return _data;
}
set
{
_data = value;
}
}
public Node<T> Next
{
get
{
return _data;
}
set
{
_data = value;
}
}
但是現在這種方法用得不多。您可以使用您已經在Data和上使用的自動屬性Next。只需直接設定和獲取這些,_data然后_next從您的代碼中洗掉和洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331404.html
下一篇:如何設定不同代碼行之間的延遲
