1. ホーム
  2. c#

[解決済み】C# 6.0は.NET 4.0に対応しますか?

2022-04-15 22:09:49

質問

サンプルプロジェクトを作成し、C#6.0の良いところであるヌル伝搬とプロパティの初期化を例として、ターゲットバージョンを.NET 4.0に設定したところ、...動作しました。

public class Cat
{
    public int TailLength { get; set; } = 4;

    public Cat Friend { get; set; }

    public string Mew() { return "Mew!"; }
}

class Program
{
    static void Main(string[] args)
    {
        var cat = new Cat {Friend = new Cat()};
        Console.WriteLine(cat?.Friend.Mew());
        Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
        Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
    }
}

.NET 4.0をターゲットにしたソフトウェアにC# 6.0の機能を使えるということでしょうか?また、制限や欠点はありますか?

どのように解決するのですか?

はい(ほとんど)。C# 6.0は新しいRoslynコンパイラーを必要としますが、新しいコンパイラーは古いフレームワークのバージョンをターゲットにしてコンパイルすることができます。それは、以下のような新機能に限られます。 フレームワークのサポートを必要としない .

例えば、C# 6.0 の文字列補間機能は、.Net の以前のバージョンでも使用できますが(結果的に string.Format ):

int i = 3;
string s = $"{i}";

で使用するには、.Net 4.6が必要です。 IFormattable 新しいフレームワークのバージョンだけが System.FormattableString :

int i = 3;
IFormattable s = $"{i}";

あなたが言ったケースは、フレームワークからの型がなくても動作します。ですから、コンパイラは古いフレームワークのバージョンでも、これらの機能を完全にサポートすることができます。