使用/不使用默认值初始化obj

时间:2017-10-11 14:54:37

标签: c#

在c#中:

public class SomeClass 
{
   int x;
   int y;
SomeClass (int x, int y)
{
  this.x = x;
  this.y = y;
}
}

有没有简单的方法来创建新的SomeClass而不设置x和y 我们有默认值,如果我设置值,则将其他值设置为 默认值?

5 个答案:

答案 0 :(得分:4)

当然,使用C#6,您可以使用auto-implemented properties

public class SomeClass
{
    public int X { get; } = 123;
    public int Y { get; } = 456;

    public SomeClass(){ }

    public SomeClass(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }
}

当然你需要一个无参数构造函数。

如果您改为表示该类型的默认值,则自动完成(数字类型为0)。

答案 1 :(得分:2)

...不确定

new SomeClass(default(int), default(int))

或者更简单:

new SomeClass(0, 0)

int的默认值始终为0。所以即使你用无参数构造函数定义它:

public SomeClass() { }

这些int班级成员仍默认为0

答案 2 :(得分:1)

您需要定义无参数构造函数:

public class SomeClass 
{
   int x;
   int y;

   public SomeClass {}
   public SomeClass (int x, int y)
   {
       this.x = x;
       this.y = y;
    }
}

创建像:

这样的对象时
var someClass = new SomeClass();

xy都会使用默认值初始化,默认值为0.

如果您不想这样做,可以通过传递给已经声明默认值xy的构造函数来处理这个问题,正如David已经指出的那样。

答案 3 :(得分:0)

  

默认构造函数会自动执行此操作。   您可以在构造函数中使用可选参数。

Read more on named and optional parameters.

<script id="carousel-template" type="text/x-handlebars-template">
    <div class="topProducts__slider">
    {{#each products}}

        <div class="topProducts__slide">
            <a href="{{link}}" class="ga-ip" data-ip-position="top products slider" data-ip-name="{{title}}">
                <img src="https://i1.adis.ws/i/jpl/jd_{{plu}}_a?qlt=80&w=250&h=250&v=2" /> 
                <h4>{{title}}</h4>
                <p class="slideDesc">{{desc}}</p>
                <p class="slidePrice">&pound;{{price}}</p>
            </a>


        </div>

        {{/each}}
    </div>
</script>

您可以将其称为

public class SomeClass
{

    // You can also write this as 
    // public SomeClass(int x=default(int), int y=default(int)) if you do 
    // not want to hardcode default parameter value.
    public SomeClass(int x=0, int y=0)
    {
        this.X = x;
        this.Y = y;
    }
}

答案 4 :(得分:0)

使用无参数构造函数。

由于必须使用new关键字以某种方式创建实例,因此您可以在类中使用无参数构造函数。

public SomeClass ()
{
    x = 0;
    y = 0;
}