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; }

这是一个具有公共 getter 和私有 setter 的属性。

根本不需要额外的方法。

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 回答