2011-12-22 8 views
1
たとえば

:したがってC#の空のオプションパラメータ

void building(int doors, bool multi_story) {...} 
or 
void building(int doors = 1, bool multi_story = false) {...} 

:物事がNULL可能でうまく動作Thease

new building(4, true); 
new building(1, false); 
or 
new building(doors: 4, multi_story: true); 
new building(); 

'タイプ?'同じように。しかし、これを行うことができればうれしいです。

「4つのドアを持つ以外はすべてデフォルトであり、マルチストーリー」という意味です。 1つの単語「true」を削除することはほんの少しですが、これをシミュレートすることは可能ですか?

+2

null可能な型について何をお尋ねしますか? – SLaks

+2

私に聞こえることは、あなたはboolの引数型がちゃんと吸うことが分かった。代わりにenumを使用します。 –

+0

質問のNullable型の部分の答えがわかりましたので、それを削除しました。指定できないNullable をパラメータとして持つことができますが、そのパラメータを決して使用することはできません。 – alan2here

答えて

2

いいえ; C#はそのような構文をサポートしていません。

ローカル変数がmulti_storyの場合はどうなりますか?

+0

You'r right、ty、おそらく "(ドア:4、multi_story :)"私はこれを示すためにコメントでこの問題を修正しました。あなたの答えのいくつかを時代遅れにして申し訳ありません。 – alan2here

+0

あなたは '新しい建物(ドア:4、multi_story :)で何をしようとしていますか? 'そのままでは意味がありません。おそらく '新しい建物(ドア:4、マルチ_ストーリー:真); –

+0

それは効果的に、それが意味することは、私はそれが構文的な砂糖だろうと思う。私には概念的には多くの意味がありますが、多分それほど頻繁にはありません "、multi_story:false)"はオプションであるため、関数のユーザはそのパラメータを使わないしかし、 "yes、multi_storyを持っている"と言うと、 "yes、multi_storyとmulti_storyも値true"を指定する必要があります。それはドアには有益ですが、ちょうどそうでないものにはあまり役に立ちません。それについて指定されているのはそれが存在することだけです。 – alan2here

0

あなただけ書くことができます。

new building(doors: 4); 

かさえを:

new building(4); 

パラメータを指定しない場合、それはその指定されたデフォルト値がデフォルトになります。従ってmulti_storyfalseになります。

+0

それはmulti_storyではないことを意味します、それはどのように指定するのですか?「新しい建物(ドア:4、マルチ_ストーリー:真)」が必要ですまたは "新しい建物(multi_story:true);"私はドアのデフォルト数が欲しかった。 「新しい建物(ドア:4、multi_story :)」のようなものの代わりに、 – alan2here

+0

「真実」を意味することをC#はどのように知っていますか? booleanオプションパラメータの例外ルールはありません。 「建物(ドア:)」とはどういう意味ですか? -1、0,1、または100とすることができます。省略可能なパラメータの値を指定するか、指定しないでください。 「間」はありません。 –

+0

数字は真/偽ではないので、特に指定されたデフォルトと指定されていないデフォルトを含むか、またはさらにはデフォルトではnullを使用することを除いて、指定されていないデフォルトのnullがうまくいく可能性があります。しかし、ええ、私はあなたが言っていることを見ます。コンセプトがC#に存在しないように思われるので、それはやや仮説的です。 – alan2here

0

関数のシグネチャがそれぞれ異なる場合は、同じ名前の関数/メソッドを複数作成できます。

上記の最初のもののために

public void building() {...} 
public void building(int doors) {...} 
public void building(bool multiStory) {...} 
public void building(int doors, bool multiStory) {...} 

、私がやって見てしまうことはある:

public void building() 
{ 
    building(1); // call building passing default doors 
} 
public void building(int doors) 
{ 
    building(doors, true); // call the building function passing the default story flag 
} 
public void building(bool multiStory) 
{ 
    building (1, multiStory); // Call building function passing default doors and ms flag 
} 
public void building(int doors, bool multiStory) 
{ 
    //final building function - deal with doors & story arguments. 
} 

は、呼び出すために、「この」キーワードを使用して、あなたはクラスオブジェクトのコンストラクタでこの種のものを行うことができます次のコンストラクタは次のようなものです:

void building() : this(1) {} 
void building(int doors) : this(doors, true) {} 
void building(bool multiStory) :this(1, multiStory) {} 
void building(int doors, bool multiStory){ 
    //do stuff 
} 
+0

これは省略可能な引数をまったく使用しません。単なる多型です。オプションの引数の例では改善されません。私の質問は、オプションの引数を使って物を表現するサブタイトルについてです。 – alan2here

関連する問題