5

次のクラスがあります(例):

public class Dog
{
    int numberOfTeeth;

    public Dog() 
    { 
        countTeeth(); 
    }

    private void countTeeth()
    {
        this.numberOfTeeth = 5; //this dog has seen better days, apparently
    }

}

犬のオブジェクトを作成したら、歯の数を計算する必要があります。クラス自体の外で変更することなく、その値にアクセスできるようにしたいと思います。

Dog d = new Dog();
int dogTeeth = d.numberOfTeeth; //this should be possible
d.numberOfTeeth = 10; //this should not

ただし、どのアクセス修飾子でこれを実行できるかわかりません。私は次のすべてを試しました:

numberOfTeeth privateにすると、アクセスできなくなります。protected internal
を作成すると、この値をクラス外で変更できます。internalに すると、この値をクラス外で変更できます。protectedに すると、アクセスできなくなります。publicに すると、この値をクラス外で変更できます。numberOfTeeth
numberOfTeeth
numberOfTeeth
numberOfTeeth

また、読み取り専用にしようとしましたが、コンストラクターの外に設定できませんでした。

これを可能にするアクセス修飾子はありますか? または、この保護を実現する他の方法はありますか?

4

4 に答える 4

9

プライベート セッターを使用してプロパティを作成します。

public int NumberOfTeeth
{
 get; private set;
}

ほとんどの .NET スタイル標準に一致するようにパスカル ケースに変更したことに注意してください。

于 2012-11-15T15:47:06.130 に答える
2

そんなことはできません。フィールドを読み取り専用にして、その値を返すメソッドを作成できます。public getter と protected setter を使用して自動プロパティを作成することもできます。

public int NumberOfTeeth { get; protected set; }
于 2012-11-15T15:46:54.770 に答える
1

フィールドprivateを作成し、読み取り専用 (セッターなし)publicプロパティを作成する必要があります。

public class Dog
{
    private int numberOfTeeth;
    public int NumberOfTeeth {get {return numberOfTeeth;}}

    public Dog() 
    { 
        countTeeth(); 
    }

    private void countTeeth()
    {
        this.numberOfTeeth = 5; //this dog has seen better days, apparently
    }
}
于 2012-11-15T15:47:40.243 に答える
0
public class Dog
{
    public int numberOfTeeth { get; private set; }

    public Dog() 
    {   
        countTeeth(); 
    }
}
于 2012-11-15T15:47:39.037 に答える