2016-12-08 40 views
1

はたぶん私はC#の最新バージョンで逃した何かがありますが、私には、このコードはそれがないまだ動作しないはずです。..C#のプロパティ:これはなぜ機能しますか?

public class FileManip { 
    public FileManip(string path) { 
     appPath = path; 
    } 

    private string appPath { 
     get; 
    } 
    //............... 
} 
+1

として、それを変更することもできます。何がうまくいくのか、C#はこれが有効であるように定義されました。彼らは彼らの言葉でそれをする。 – Servy

+0

getを持つ人は 'readonly'を行います。それらのプロパティは、コンストラクタで 'set'することができます。 –

+1

"C#の最新バージョンで見逃したことがあるかもしれない" - "Getter-only"プロパティは、[wiki](https://github.com/dotnet/roslyn/wiki/New- C言語の機能23-6): "自動プロパティは設定者なしで宣言できるようになりました"。 – Quantic

答えて

8

プロパティが実装でgetを持っている場合は、あなたが書き込みを許可しない性質を持っている:

public class FileManip { 
    public FileManip(string path) { 
     AppPath = path; // <<===== ERROR 
    } 
    private string AppPath { 
     get { return @"c:\temp\"; } 
    } 
} 

しかし、あなたがいない実装で{ get; }を持っている場合、それは読み取り専用のいわゆるますプロパティ。これはC#6で追加されています。コンストラクタからのみ書き込むことができます。コードの他のすべての部分は、このプロパティに読み取り専用としてアクセスします。

+0

ahh参照してください..私はreadonlyとしてマークされた通常の変数はコンストラクタで設定することができます(Constとは違う)が、前にプロパティでこれを見たことがないことを知っていた。 thx – gmes29

1

読み取り専用のプロパティは、あなたがやっているコンストラクタから設定することができます。

+0

コンストラクタから必要な回数だけ設定することができます。 – Servy

+0

ありがとう@Servy、編集 – mmathis

0

あなたがあなた自身のために見てきたように、はい、それは、仕事をし、言うことは何があり

private const string appPath = "something"; 
+0

は、それ以上プロパティを使用する必要がないため – gmes29

関連する問題