c#中带参数和无参数的构造函数之间的区别

时间:2015-12-08 10:24:45

标签: c# parameters constructor

这个问题对许多人来说可能看起来很简单,但我真的想了解以下内容

  • 两个类之间的差异以及Name属性
  • 使用两者之一的好处
  • 当&在哪里使用(任何实际应用)?

代码:

public class test1
{
    public test1()
    {

    }

    public string Name { get; set; }
}

public class test2
{
    public test2(string name)
    {
        Name = name;
    }

    public string Name { get; set; }
}

public class SampleTest
{
    public void PerformTests()
    {
        test1 Test1 = new test1();
        Test1.Name = "Power Measurements";

        test2 Test2 = new test2("Power Measurements");
    }
}

更准确地说,请考虑对象 Test1& TEST2

对此的任何帮助都将非常感激。

4 个答案:

答案 0 :(得分:2)

两个类之间的物理差异仅在构造函数中。一个人有一个参数;一个没有。

语义差异在于test2 需要 a Name。在test1中,它是可选的。因此,如果要强制调用者提供名称,则可以使用test2

答案 1 :(得分:1)

如果您的财产是可读写的,那么两者可能没有区别。这取决于它是必需的属性还是可选的属性。定义构造函数时,强制提供属性。在另一种情况下,您的财产可能会或可能不会由您的班级用户设置。但是,在这种情况下,您可以在构造函数中为它提供默认值。

但是,通常您不需要具有可写属性,因此您可以将其设置为只读(通过声明私有setter)并在构造函数中设置其值。在这种情况下,您必须在constructors参数中提供值。

public class TestClass
{             
     public string Name { get; private set; }

     public TestClass(string name)
     {
         this.Name = name;
     }    
}

现在,您可以通过在构造函数中提供属性来设置该属性的值。一旦设置它就是不可变的(至少范围之外)。但是,您可以更改类里面的值。如果您想避免这种情况,您还必须为该属性提供readonly - 后备字段。

public class TestClass
{             
     private readonly _name;
     public string Name { get { return this._name; } }

     public TestClass(string name)
     {
         this._name = name;
     }    
}

这是最安全的appraoch,可以避免您在类中的用户或类本身内更改构造函数中初始提供的值。

答案 2 :(得分:1)

带参数的构造函数强制开发人员在创建对象的实例和实例时提供任何所需的变量。

例如,假设每个对象都应该有一个“名称”,但在创建对象后无法更改。

public class TestClass
{
     private string _name = string.Empty;

     public string Name
     {
         get{ return _name; }
         private set { _name = value; }
     }

     public TestClass(string name)
     {
         this.Name = name;
     }
}

答案 3 :(得分:1)

没有参数的构造函数是默认的,您可以使用它来创建一个没有任何进一步规范的对象,使用一个参数,您可以在创建对象期间指定名称或其他内容。您应该阅读更多关于面向对象编程的基础知识,以便更好地理解。