2016-12-08 108 views
1

也許有什麼東西我錯過了C#的最新版本,但對我來說這代碼不應該但它確實工作..C#屬性:爲什麼這個工作?

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

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

有什麼要說的,是的,它的工作,因爲你已經看到了自己。是什麼使得它工作,C#被定義爲這種方式是有效的。他們可以用他們的語言來做到這一點。 – Servy

+0

有一個得到它使'只讀'。這些屬性可以在構造函數中設置。 –

+1

「也許有些東西我錯過了最新版本的C#」 - 「Getter-only」屬性是在c#6中根據[wiki](https://github.com/dotnet/roslyn/wiki/New- Language-Features-in-C%23-6):「現在可以在沒有setter的情況下聲明自動屬性」。 – 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我看到..我知道標記爲只讀的常規變量可以在構造函數中設置(使它與Const不同),但從未在屬性中看到過。 thx – gmes29

1

只讀屬性可以從構造函數,你正在做的設定。

+0

您可以根據需要從構造函數中將它們設置多次,而不只是一次。 – Servy

+0

謝謝@Servy,編輯 – mmathis

0

你可能想改變它作爲

private const string appPath = "something"; 
+0

這樣做,因爲沒有更多需要使用財產 – gmes29