在C#中带参数的构造函数中的正确赋值是什么?

时间:2015-09-12 23:42:11

标签: c#

this.之后我必须选择作者或作者?其他问题是什么意味着这些选项旁边的图标有一个“扳手”而另一个有两个图标类似于长块更多其他Little我不知道什么是Little和那些图标是什么意思?如果我想在同一个类中使用第二个构造函数,它是一个没有参数的构造函数,那么可以使构造函数像图像之后的代码一样吗?

enter image description here

下一个代码中的其他问题没有参数的以下构造函数可以吗?或者可以这样做,或者做那项任务是荒谬的吗?如果我不想要特定的默认值,最好设置this.author = null;this.author = "";或必须做什么?

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

4 个答案:

答案 0 :(得分:4)

你应该了解什么是领域和什么是财产。

字段 - 保留您的数据。

属性 - 它是数据的访问者,他们喜欢方法,但有一些sintacsic shugar。

当你有像Book这样简单的类时,它看起来像这样:

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

你可以创建这样的新书:

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

C#有autoproperty,所​​以这段代码:

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;
}

基本上,当你声明一些私有字段或方法时,它只适用于你的类。

当您申报公共财产或方法时(公共领域不好,除非绝对必要,否则不要这样做),这适用于您班级的消费者。

答案 1 :(得分:3)

没有任何参数的构造函数称为default constructor

如果您不想,则不必编写默认构造函数。例如,如果您希望Book book = new Book ();是语法错误,那么您不应该编写默认构造函数。

如果您确实创建了默认构造函数,那么它应该以某种方式初始化您的类实例,这在您的程序上下文中是有意义的。考虑执行bookBook 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()
  {
  }

答案 2 :(得分:1)

在您的特定代码中,使用this.Authorthis.author的差异并不大。通常,我更喜欢this.Author,因为稍后如果在Book.Author的setter中添加一些代码,您可能还需要运行其他代码,这就是创建setter的原因。

但是你的第二个构造函数是错误的:

this.author = Author;

这相当于:

this.author = this.Author

它会将null分配给author。你应该使用构造函数中的参数,就像你的第一个构造函数一样。

答案 3 :(得分:0)

扳手代表一个属性。块代表一个字段。设置字段比设置属性更有效。设置属性需要两个操作而不是一个操作。尽可能设置字段。当属性更改时必须发生某些事情时,设置属性非常有用。您可以将OnChange代码添加到属性的setter中。