繁体   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