类属性,可在内部获得和设置,但只能在外部获得

本文关键字:外部 设置 在内部 属性 | 更新日期: 2023-09-27 18:08:39

我意识到这可能是一些非常基本的东西,但我不确定实现以下目标的最佳实践。

我有以下类的字符串属性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,但这并不能使值从外部访问

类属性,可在内部获得和设置,但只能在外部获得

听起来你只是想:

public string MyString { get; private set; }

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

根本不需要额外的方法。

(注意,这里使用"内部"这个词可能会引起混淆,因为在c#中关键字internal的特定含义。)

只能允许类成员使用setter,通常是构造函数:

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

或者允许在内部/assembly成员中使用setter:

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

您可以在get和set上指定访问修饰符,例如:

public string MyString
{
    get;
    private set;
}
public string myString { get; private set; }