2017-05-04 9 views
-2

デフォルトコンストラクタは、 "Class"と "Struct"に対して定義されています。しかし、私は1つだけコンストラクタを持つクラス「ポイント」を宣言し、あまりにもパラメータ化1という、コンパイラは私がどの再び、しかし、私は構造体を持っている場合は、「ポイント」Structuredのパラメータ化されたコンストラクタ

Point p = new Point() 

を書くことができませんでした場合コンパイラは、構造体はオブジェクトを作成させ、オブジェクトを作成するクラスを停止した理由を1つだけがコンストラクタをパラメータ化している、コンパイラは私が

Point p = new Point() 

を書くことができます、私は求めています質問はありますか?

注:私はあなたがMSDNで見つけることができますあなたの質問にC#6

+5

あなたの質問は何ですか?あなたはそれを聞いたことがありません。 –

+1

これは構造体の動作です。参照してください[here](http://stackoverflow.com/q/575901/51) –

+2

さらに、Jon Skeetからの回答で別の質問 - http://stackoverflow.com/questions/333829/why-cant-i-define- a-default-constructor-in-a-struct-in-net – Bakudan

答えて

-1

あなたがクラスを使用するときは、そのオブジェクトがまたは任意の特定の方法で初期化することはできませんができるかどうかを定義することができます。 しかし、structに関しては、パラメータなしで常に初期化できる必要があります。

クラスは、指定された方法で初期化できない場合はnullで初期化できますが、構造体のオプションはありません。しかし、構造体はdefaultキーワードで初期化することができます。これは基本的にパラメータのないコンストラクタを呼び出します。編集

私は値型としてstructのための共通のルールを概説している間は、nullstructを初期化する(またはにそれをシミュレート)するにはいくつかの方法が実際にあります。最も一般的なものはもちろん、Nullable<>であり、すべてではないにしてもほとんどの場合、これで十分です。 ジョンスキートによってNULL可能タイプと第4章言って何もない:それはどのように動作するか興味があるとstructnullを設定する他の方法は何人のために、私は深さでC#のをお勧めします。追加情報はhereです。

+1

私は賞金の理由が_ "信頼できる公式ソースからの回答を探す"と思っていました_。私は授与されたasnwerが_ "私の意見では..."答えのタイプであることに驚いています。 – DDan

+0

@Dmitriy Volkov nullable構造体はどのカテゴリに属していますか?これは構造体であり、nullに設定することができます:https://msdn.microsoft.com/en-us/library/b3h38hb0(v=vs.110).aspx – Rekshino

+0

@Rekshinoはい、設定する方法はいくつかありますJon Skeetが彼の本で議論しているように、nullを構造体に渡します。一般的に言えば、このようなメカニズムを実装することはほとんどありませんが、それについて学びたい場合は、Jon Skeetの "C#in Depth:第4章nullable型で何も言わない"で読むことができます。 –

-1

回答(なぜ何もコンパイルエラーはありません)にこのコードを書いています:C#では

クラスや構造体されています意味的に異なる

https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/classes-and-structs/using-structs

構造体はデフォルトコンストラクタ( パラメータなしコンストラクタ)またはデストラクタを宣言することはできません。

https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/classes-and-structs/structs

各値型は、その型のデフォルト値を初期化する暗黙のデフォルトコンストラクタを有します。値タイプのデフォルト値 については、「デフォルト値テーブル」を参照してください。

https://docs.microsoft.com/en-us/dotnet/articles/csharp/language-reference/keywords/value-types

0

structは値型なので、そのデフォルト値は参照型のようにnullではなく、すべてのメンバーがデフォルト値に設定されているインスタンスです。

パラメータ化されたコンストラクタの呼び出しのみが許可されていても、既定のインスタンスを作成できます。これは、既定のコンストラクタで構造体を作成するのとまったく同じです。この構造体与えられた例

、:

var p = new Point(); 

あなたはまだこれを行うことができます:

var p = default(Point); 

Pointがあった場合

public struct Point 
{ 
    public int X { get; private set; } 
    public int Y { get; private set; } 

    public Point(int x, int y) 
    { 
     X = x; 
     Y = y; 
    } 
} 

あなたはこれを行うことができなかった場合でも、これはあなたにインスタンスを取得しないクラス、それはあなたを得るだろうnull。しかし、それはあなたにインスタンスを取得します。

デフォルトのコンストラクタを使用しないようにする理由はありません。であり、デフォルトのインスタンスを作成できません。

関連する問題