2012-01-15 91 views
-3

爲什麼此代碼不起作用?屬性和專用集合

class Test 
{ 
    int Abc { private set; get; } 
} 

什麼是屬性的默認訪問修飾符?

+0

是的,C#,對不起。 – Never 2012-01-15 15:12:45

+0

可能重複的[C# - 屬性必須更嚴格?](http://stackoverflow.com/questions/6886514/c-sharp-property-must-be-more-restrictive) – 2012-01-15 15:19:48

+0

@Saeed雖然類似,我不認爲這是一個重複。 – kenny 2012-01-15 15:49:06

回答

4

農行屬性必須是public,protected或內部:

public int Abc { get; private set; } 

在你的情況的屬性是私有的(因爲你沒有指定訪問修飾符),所以它已經是一個私人組。你不能在當前類之外修改它的值,所以在這種情況下聲明一個私有setter沒有意義。

+0

@Colder,你可以。它已經是私人的了。因此,爲私人財產定義一個私人二傳手是沒有意義的。無論如何,當前課程以外的任何內容都不能修改其值。它也無法獲得它的價值,因爲這個屬性是私人的。在這種情況下,您不使用屬性。你使用一個字段:'private int Abc;'。 – 2012-01-15 15:17:11

3

對於屬性的默認訪問修飾符是私有的,對於任何其他類的成員。如果你想使得二傳手不易接近,你需要先讓該傳球更容易接近,然後對傳球手施加限制。

class Test 
{ 
    public int Abc1 { private set; get; } 
    protected int Abc2 { private set; get; } 
    internal int Abc3 { private set; get; } 
    protected internal int Abc4 { private set; get; } 
} 
+0

通過'type',你需要排除枚舉和接口,默認情況下它們的成員是公共的。 – Douglas 2012-01-15 15:25:11

+0

@Douglas沒錯。我將它改爲一堂課。 – oleksii 2012-01-15 15:27:04

3

所有類成員(包括性)是private的缺省可訪問性;見Accessibility Levels。您的set之前的private是冗餘的,因此是錯誤的。您的代碼將在語義上等同於以下內容:

class Test 
{ 
    int Abc { get; set; } 
} 

你只需要指定一個private訪問修飾符爲當地產是更方便您的set訪問;例如(常見的場景):

class Test 
{ 
    public int Abc { get; private set; } 
}