簡體   English   中英

在C#中帶有參數的構造函數中的正確賦值是什么?

[英]What is correct assignment in a constructor with arguments in C#?

此后我必須選擇作者還是作者this. 還有其他問題,這些選項旁邊的圖標是什么意思,一個帶有“扳手”,另一個帶有兩個像長塊的其他圖標。Little,我不知道那個Little是什么,這些圖標是什么意思? 如果我想在同一類中使用第二個構造函數,那就是沒有參數的構造函數可以使該構造函數像圖像后的代碼一樣嗎?

在此處輸入圖片說明

下一個代碼中的其他問題下面的無參數構造函數可以嗎? 還是可以那樣做,或者做這項工作是荒謬的? 如果我不希望使用特定的默認值,最好設置this.author = null; this.author = ""; 還是必須做什么?

 public Book()
 {
     this.author = Author;
     this.title = Title;
 }

您應該了解什么是字段,什么是屬性。

字段-保留您的數據。

屬性-它是數據的訪問者,它們喜歡方法,但帶有一些簡單的技巧。

當您擁有像Book這樣的簡單類時,它可能如下所示:

class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
}

您可以像這樣創建新書:

var book = new Book {Author = "Name", Title = "Some Book"};

C#具有自動屬性,因此此代碼:

public string Title { get; set; }

與此相同:

private string title;
public string Title
{
    get { return title; }
    set { title = value; }
}

關於你的問題。 如果您希望保持原樣。 構造函數應為:

public Book(string title, string author)
{
    this.title = title;
    this.author = author;
}

基本上,當您聲明某些私有字段或方法時,僅適用於您的類。

當您聲明公共屬性或方法時(公共字段是錯誤的,除非絕對必要,否則不要這樣做),它適用於您的類的使用者。

沒有任何參數的構造函數稱為默認構造函數

如果您不想這樣做,則不必編寫默認的構造函數。 例如,如果您要Book book = new Book (); 成為語法錯誤,那么您不應該編寫默認的構造函數。

如果確實創建了默認構造函數,則它應該以某種在程序上下文中有意義的方式初始化類實例。 考慮執行Book book = new Book ();之后應該是什么樣的book Book book = new Book ();

您可以選擇一些書和作者作為默認書...

  public Book()
  {
     title = "The Hitchhikers Guide to the Galaxy";
     author = "Douglas Adams";
  }

...或者您可以使用一些值來表明實例尚未真正初始化...

  public Book()
  {
     title = "<<< title not set >>>";
     author = "<<< author not set >>>";
  }

...或者您可以使用其他合適的值...

  public Book()
  {
     title = String.Empty;
     author = String.Empty;
  }

...甚至什么都不做...

  public Book()
  {
  }

在您的特定代碼中,使用this.Authorthis.author的區別不大。 一般情況下,我更喜歡this.Author因為以后如果在二傳手添加一些代碼Book.Author ,你可能還需要運行額外的代碼,這就是為什么你創建一個二傳手。

但是您的第二個構造函數是錯誤的:

this.author = Author;

這等效於:

this.author = this.Author

它將為author分配null 您應該像第一個構造函數一樣使用構造函數的參數。

扳手代表一個屬性。 塊代表一個字段。 設置字段比設置屬性更有效。 設置屬性需要兩項操作,而不是一項。 盡可能設置字段。 當屬性更改時必須發生某些事情時,設置屬性很有用。 您可以將OnChange代碼添加到屬性的設置器中。

暫無
暫無

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

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