gpt4 book ai didi

c# - Protected 和 Private 访问修饰符的问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:35 26 4
gpt4 key购买 nike

伙计们,谢谢你的时间。正如我们所知,关键字“Private”和“Protected”对于防止某些方法、字段、属性在类外进行无效访问非常有用。但我在特定情况下遇到了问题。示例如下:

Class Node
{
public string Name {get; private set;}//Private setting authority
public int ID {get;set}

public Node Previous {get;set;}
public Node Next {get;set;}

public void Test()
{
this.Name='Valid';
this.Next.Name='Invalid';//Is this valid??
}
}

就像上面的代码一样,我们在这里得到了一个'Node'类,它有两个名为'Previous'和'Next'的属性也是'Node'类型。现在让我们关注'Test()'方法。它是有效的设置'this.Name',但是设置'this.Next.Name'很奇怪吗?不幸的是,编译器将其视为有效格式!

据我所知,'Private' 意味着它不能在类外使用。但是在这种情况下,我可以访问'Previous' 的任何非公共(public)成员(私有(private)/ protected 等)和'下一步'。

这让我很困惑,请你给点建议,谢谢!

最佳答案

Test() 方法是Node 类的成员,因此它可以访问private 成员;这意味着它可以设置 Name 属性。它是该类的另一个实例并不重要——它仍然是同一个类。

不同类中的方法无权访问 Node 类的 private 成员,因此它可以获得 Name 属性, 但不设置它。

例子:

class Node
{
public string Name { get; private set; }
public int ID { get; set; }
public Node Previous { get; set; }
public Node Next { get; set; }

public void Test()
{
this.Name = "Valid";

// Works
this.Next.Name = "Invalid";
}
}

class Other
{
public void Test()
{
Node node = new Node();

// Doesn't Work
node.Name = "Invalid";
}
}

关于c# - Protected 和 Private 访问修饰符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com