我意识到这可能是非常基本的事情,但我不确定实现以下目标的最佳做法。
我有以下带有字符串属性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
,但这并不能使值从外部访问。
答案 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; }