11

これはおそらく、誰かにとって非常に簡単な答えです。私にはそのOptional Parameterような方法があります。

public static Email From(string emailAddress, string name = "")
    {
        var email = new Email();
        email.Message.From = new MailAddress(emailAddress, name);
        return email;
    }

ここで、.Net 3.5をターゲットにする必要があり、.Net 4の一部であることが理解できましたOptional Parameters。ただし、プロジェクトがビルドされ、ターゲットフレームワークとして3.5が表示されている[プロパティ]-[アプリケーション]ページを再確認しました。次に、MSDNで、VS2010のC#4の機能であるという記事を見つけました。(MSDNの記事->名前付きおよびオプションの引数

誰かが私のためにこれを明確にするのを手伝ってもらえますか?C#4は.Net4を必要としませんか?オプションのパラメータは実際には何の一部ですか?

ありがとうございました。

4

4 に答える 4

22

オプションのパラメーターは、1.0 以降、CLR でサポートされています。VB.Net のような言語は、最初からそれらを使用しています。それらをサポートする C# の最初のバージョンは 4.0 ですが、それでも 2.0 CLR の有効なコードを生成できます。したがって、3.5 CLR (または 2.0、3.0 など) をターゲットにしている場合は、2010 で既定のパラメーターを使用できます。

このタイプのサポートは、デフォルト パラメータに限定されません。多くの新しい C# 機能は、CLR の変更に依存しないため、古いバージョンのフレームワークでも使用できます。CLR バージョン 2.0 以降でサポートされているものをいくつか次に示します。

  • 名前付き引数: C# 4.0 を追加
  • ラムダ式: C# 3.0 を追加
  • 自動プロパティ: C# 3.0 を追加
  • 拡張メソッド: C# 3.0 を追加
  • Co/Contra Variance: C# 4.0 を追加
于 2010-08-30T16:30:51.603 に答える
5

それをコンパイルし、ILDASM などのツールを使用して出力を調べると、オプションのパラメーターが、メソッドの仮パラメーターを記述する属性をメタデータに追加することによって単純に実装されていることがわかります。その属性クラスがターゲット プラットフォームで使用可能である限り、発行されたコードをダウンレベル プラットフォームで使用しても問題はありません。

于 2010-08-30T16:33:17.933 に答える
2

言語バージョンは、フレームワークバージョンから独立しています。C#の場合、それらはほとんど並行して実行されます。つまり、C#4とフレームワーク4.0はVisual Studio 2010に付属しています(ただし、3.5バージョンのC#はありません)。

VB 7は最初のVB.NETバージョンであったため、VBではバージョン番号が異なります。したがって、VB10はフレームワーク4.0と同時に提供されます。

オプションのパラメーターは、C#4で導入された言語機能です。VS2010を使用する場合、フレームワーク2.0を対象としている場合でも、C#4を使用するため、すべてのC#4機能を使用できます。

于 2010-08-30T16:36:27.673 に答える
-1

C# 4.0 は Visual Studio 2010 に含まれており、C# コンパイラはオプションのパラメーターを認識します。そうです、C# 4.0 の言語定義は .NET 4.0 とは何かが異なります。.NET 3.5用にコンパイルされたオプションのパラメーターを持つメソッドは、たとえば.NETで開くときにオーバーロードされたメソッドが表示されると思います。VS 2008

于 2010-08-30T16:28:08.520 に答える