目录
属性和索引器中的 get 和 set 访问器的访问修饰符
● 索引器和属性自带 get 和 set 访问器, 在默认的情况下: 如果一个属性有public 访问级别, 那么它的那个两个访问器都有同样的访问级别。 索引器也一样。
● 不过我们也可以为两个访问器分配不同的访问级别。
下面看一个示例程序:
namespace Ch05Ex03
{
class Persion
{
public string Name
{
get; // 默认设置为public的, 因为该属性是public的
private set; //把set设置为 私有的访问级别,这样在外面就不能设置访问器了
}
public Persion(string name)
{
Name = name; // 只能在类的内部设置该属性了,这里用构造函数设置
}
public void SetValue(string _name)
{
Name = _name; //也可以用公有的成员函数设置
}
}
class Program
{
static void Main(string[] args)
{
Persion p = new Persion("Capt.Ernest Evans");
WriteLine($"先输出名字是:{p.Name}");
// p.Name = "huangh"; //不可以在类外设置set访问器,因为该访问器是私有
p.SetValue("huangchengtao"); // 通过类的公有函数设置set访问器
WriteLine($"\n在先输出名字是:{p.Name}");
ReadKey();
}
}
}
输出结果为:
先输出名字是:Capt.Ernest Evans
在先输出名字是:huangchengtao
注意: 在这段代码中,尽管可以在类的外部读取该属性,但却只能在类的内部设置它, 既可以是类的构造函数、也可以是其它的成员函数。 这是一个非常重要的封装工具。
● 访问器的访问修饰符有几个限制, 需要重要注意的有:
属性或索引器既有get访问器又有set访问器时, 其访问器才能有访问修饰符。
虽然两个访问器都必须出现,但是只能有一个访问器能有访问修饰符。
访问器的访问修饰符必须比 属性或索引器 的访问级别 有更严格的访问级别。
比如说: 如果一个属性的访问级别是public的,那么其中一个访问器的访问级别可以是protected、private、internal。
如果说属性的访问级别是protected, 那么访问器的修饰符只能是 private的。