类属性,可在内部获得和设置,但只能在外部获得
本文关键字:外部 设置 在内部 属性 | 更新日期: 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; }