今日は、私が長年待っていた別の新しいC#4.0についてお話します。 過去には、その不在はアーキテクチャ上のソリューションによるものでした。 しかし、どうやら、プラグマティズムが勝ち、現在ではデフォルトの設定になっています。 さらに便利にするために、名前付きパラメーターを追加しました。 数分後にそれらについて説明します。次に、デフォルト設定を扱います。
次のようなクラスがあるとします:
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
public class TestClass { public void PerformOperation( string val1, int val2, double val3) { Console .WriteLine( "{0},{1},{2}" , val1, val2, val3); } } * This source code was highlighted with Source Code Highlighter .
これでインスタンス化してメソッドを呼び出すことができます:
- var testClass = new TestClass();
- testClass.PerformOperation( "val" 、10、12.2);
*このソースコードは、 ソースコードハイライターで強調表示されました。
しかし、最も頻繁に使用される「良い」パラメーター値を知っているとしたらどうでしょうか。 今日まで、解決策はメソッドをオーバーロードすることでした:
- パブリック クラス TestClass
- {
- public void PerformOperation()
- {
- PerformOperation( "val" 、10、12.2);
- }
- public void PerformOperation( string val1)
- {
- PerformOperation(val1、10、12.2);
- }
- public void PerformOperation( string val1、 int val2)
- {
- PerformOperation(val1、val2、12.2);
- }
- public void PerformOperation( string val1、 int val2、 double val3)
- {
- Console .WriteLine( "{0}、{1}、{2}" 、val1、val2、val3);
- }
- }
*このソースコードは、 ソースコードハイライターで強調表示されました。
かなり長い。 しかし、C#4.0はより良いソリューションを提供します。
- パブリック クラス TestClass
- {
- public void PerformOperation( string val1 = "val" 、 int val2 = 10、 double val3 = 12.2)
- {
- Console .WriteLine( "{0}、{1}、{2}" 、val1、val2、val3);
- }
- }
*このソースコードは、 ソースコードハイライターで強調表示されました。
どれくらいきれいですか? このメソッドをどのように呼び出すのでしょうか? はい、オーバーロードの場合はまったく同じです。
- var testClass = new TestClass();
- testClass.PerformOperation( "val" 、10);
*このソースコードは、 ソースコードハイライターで強調表示されました。
とても良い。 この呼び出しの3番目のパラメーターは、デフォルトでは12.2です。 これで、VB.NET開発者は私たちを笑わなくなります。 さらに、デフォルトのパラメーターはコンストラクターに適用されます。
- パブリック クラス TestClass
- {
- public TestClass( string someValue = "testValue" )
- {
- }
- public void PerformOperation( string val1 = "val" 、 int val2 = 10、 double val3 = 12.2)
- {
- Console .WriteLine( "{0}、{1}、{2}" 、val1、val2、val3);
- }
- }
*このソースコードは、 ソースコードハイライターで強調表示されました。
複数のコンストラクタのオーバーロードはもうありません!
上記のメソッド呼び出しでval2の値を省略するとどうなりますか? つまり、val1とval3を指定しますが、val2のデフォルト値はそのままにします。 このようにはできません。
- var testClass = new TestClass();
- testClass.PerformOperation( "val" 、10.2);
*このソースコードは、 ソースコードハイライターで強調表示されました。
10.2はintにキャストできないため、このコードはコンパイルされません。ここでは、必要に応じて、C#は2番目ではなく3番目のパラメータをデフォルトで残そうとします。 それで、私たちの出口は何ですか? 名前付きパラメーターを使用できます。 パラメータ名、コロン、および渡す値の指定で構成されます。 つまり、呼び出しは次のようになります。
- var testClass = new TestClass();
- testClass.PerformOperation( "val" 、val3:10.2);
*このソースコードは、 ソースコードハイライターで強調表示されました。
かなりきれいですが、パラメータ名を変更するとそのような基本的な結果が生じるという事実に混乱しています。 大規模なアプリケーションを開発するのにどれほど便利かは、時が経てばわかります。 ただし、他の言語で作業している人々は、長年にわたってこの言語で生活しています。
C#4.0のもう1つの興味深い新機能と、新しいVS2010を詳しく調べるもう1つの理由を次に示します。
記事の翻訳: C#4.0新機能パート2-デフォルトおよび名前付きパラメーター私の ブログ からのクロスポスト