2017-10-11 196 views
0

在C#:初始化OBJ有/無默認值

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

有沒有簡單的方法,使新的SomeClass的沒有設置X和Y而是 對他們的默認值,如果我設定值,否則將它們設置有 默認值?

+0

建立一個無參數的構造函數? –

+0

我有時需要設置值,有時不需要...... –

+1

您可以在一個類中創建多個構造函數。 –

回答

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

您需要定義一個參數的構造函數:當你創建了一個對象

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

初始化

如果你不想這樣做,你可以通過傳遞給你已經聲明瞭構造函數的構造函數來處理t值爲xy,正如David已經指出的那樣。

0

默認的構造函數會自動執行該操作。 您可以在構造函數中使用可選參數。

Read more on named and optional parameters.

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

你可以把它作爲

void Main() 
{ 
    SomeClass a = new SomeClass(); 

    SomeClass b = new SomeClass(1); 

    SomeClass c = new SomeClass(2,4); 

} 
2

當然...

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

或者更簡單地說:

new SomeClass(0, 0) 

int的默認值始終爲0。所以,即使你有一個參數的構造函數定義它:

public SomeClass() { } 

那些int類成員仍默認爲0

0

使用無參數的構造函數。

由於必須使用new關鍵字以某種方式創建實例,因此可以在類中使用無參數構造函數。

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