次のようなクラスがあるとします:
これでインスタンス化してメソッドを呼び出すことができます: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);
かなり長い。 しかし、C#4.0はより良いソリューションを提供します。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- パブリック クラス 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);
- }
- }
どれくらいきれいですか? このメソッドをどのように呼び出すのでしょうか? はい、オーバーロードの場合はまったく同じです。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- パブリック クラス TestClass
- {
- public void PerformOperation( string val1 = "val" 、 int val2 = 10、 double val3 = 12.2)
- {
- Console .WriteLine( "{0}、{1}、{2}" 、val1、val2、val3);
- }
- }
とても良い。 この呼び出しの3番目のパラメーターは、デフォルトでは12.2です。 これで、VB.NET開発者は私たちを笑わなくなります。 さらに、デフォルトのパラメーターはコンストラクターに適用されます。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- var testClass = new TestClass();
- testClass.PerformOperation( "val" 、10);
複数のコンストラクタのオーバーロードはもうありません!
*このソースコードは、 ソースコードハイライターで強調表示されました。
- パブリック クラス 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のデフォルト値はそのままにします。 このようにはできません。
10.2はintにキャストできないため、このコードはコンパイルされません。ここでは、必要に応じて、C#は2番目ではなく3番目のパラメータをデフォルトで残そうとします。 それで、私たちの出口は何ですか? 名前付きパラメーターを使用できます。 パラメータ名、コロン、および渡す値の指定で構成されます。 つまり、呼び出しは次のようになります。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- var testClass = new TestClass();
- testClass.PerformOperation( "val" 、10.2);
かなりきれいですが、パラメータ名を変更するとそのような基本的な結果が生じるという事実に混乱しています。 大規模なアプリケーションを開発するのにどれほど便利かは、時が経てばわかります。 ただし、他の言語で作業している人々は、長年にわたってこの言語で生活しています。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- var testClass = new TestClass();
- testClass.PerformOperation( "val" 、val3:10.2);
C#4.0のもう1つの興味深い新機能と、新しいVS2010を詳しく調べるもう1つの理由を次に示します。
記事の翻訳: C#4.0新機能パート2-デフォルトおよび名前付きパラメーター
私の ブログ からのクロスポスト