7

これは本当に基本的なことかもしれませんが、次のことを達成するためのベストプラクティスについてはわかりません。

文字列プロパティを持つ次のクラスがありますmyString

public class MyClass
{
    public string myString
    {
        get {
            return myString;
        }
    }

    public void AFunction()
    {
        // Set the string within a function
        this.myString = "New Value"; // Error because the property is read-only
    }
}

私は、myStringプロパティに次のことが当てはまることを望みます:

  • 内部設定可能
  • 内部で取得可能
  • 外部から設定不可
  • 外部から取得可能

myStringそのため、クラス内で変数を設定し、その値をクラス外から読み取り専用にできるようにしたいと考えています。

次のように、個別の get および set 関数を使用せずにmyStringプロパティをプライベートにすることなく、これを実現する方法はありますか。

public class MyClass
{
    private string myString { get; set; }

    public void SetString()
    {
        // Set string from within the class
        this.myString = "New Value";
    } 

    public string GetString()
    {
        // Return the string
        return this.myString;
    }
}

上記の例では、変数を内部的に設定できますがmyString、クラスの外部から実際のプロパティに読み取り専用でアクセスすることはできません。

試してみprotectedましたが、これにより外部から値にアクセスできなくなります。

4

4 に答える 4

12

あなたがただ欲しいように聞こえます:

public string MyString { get; private set; }

これは、パブリック ゲッターとプライベート セッターを持つプロパティです。

余分なメソッドはまったく必要ありません。

internal( C# 内でのキーワードの特定の意味を考えると、ここで「内部的に」という言葉を使用すると混乱する可能性があることに注意してください。)

于 2013-04-10T11:06:45.793 に答える
10

クラスメンバー、通常はコンストラクターに対してのみセッターを許可できます。

public class MyClass
{
    public string myString { get; private set; }
}

または、内部/アセンブリ メンバー内でセッターを許可することもできます。

public class MyClass
{
    public string myString { get; internal set; }
}

ゲッターはパブリックになります。

于 2013-04-10T11:09:15.593 に答える
3

get および set でアクセス修飾子を指定できます。次に例を示します。

public string MyString
{
    get;
    private set;
}
于 2013-04-10T11:07:09.740 に答える
2
public string myString { get; private set; }
于 2013-04-10T11:07:20.077 に答える