Class属性,Gettable和内部可设置,但只能从外部获取

时间:2013-04-10 11:05:47

标签: c# class properties

我意识到这可能是非常基本的事情,但我不确定实现以下目标的最佳做法。

我有以下带有字符串属性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属性符合以下条件:

  • 内部可设置
  • 内部Gettable
  • 外部不可设置
  • Gettable外部

所以我希望能够在类中设置变量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 个答案:

答案 0 :(得分:11)

听起来你只是想要:

public string MyString { get; private set; }

这是一个有公共吸气者和私人制定者的财产。

根本不需要额外的方法。

(请注意,鉴于C#中关键字internal的具体含义,在此处使用“内部”一词可能会造成混淆。)

答案 1 :(得分:9)

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

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

或者您可以在内部/装配成员中允许使用setter:

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

吸气剂将公开。

答案 2 :(得分:3)

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

public string MyString
{
    get;
    private set;
}

答案 3 :(得分:2)

public string myString { get; private set; }