gpt4 book ai didi

c# - 变量c#的附加赋值

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:03 25 4
gpt4 key购买 nike

如何在类中创建只能使用加法赋值设置的属性。我知道事件在 C# 中以这种方式工作。我想知道如何在我自己的代码中实现该构造。

例如。对于事件,我可以执行以下操作

public event EventHandler myEventHandler;
myEventHandler += NewEvent;

这会将 NewEvent 添加到调用 myEventHandler 时运行的事件链中。

我希望能够做类似的事情。我想创建一个 Graph 类,它用节点和连接对数学图进行建模。 Graph 类将有一个 nodes 属性,它应该只能添加或删除节点,但不能设置为一个整体属性。

再次使用 EventHandler 示例,我无法使用 EventHandler 执行以下操作

myEventHandler = OnlyOneEventWillRun;

我还希望能够实现类似于 set{} 访问器的加法赋值逻辑。

最佳答案

对于初学者来说,myEventHandler 是一个多播委托(delegate) - 您可以制作自己的委托(delegate)来反射(reflect)该功能,但这并不能真正解决您所说的问题。

我将采用的方法是使用私有(private) setter(或根本不使用 setter)——这将允许您从定义属性的类中设置值(大概您会知道并记住您在做什么) ) 但不是来自类之外(另一个开发人员可能会无意中搞砸了):

private List<object> _nodes;    // private backing field
public List<object> Nodes
{
get
{
return _nodes; // can be "gotten" by any class
}

private set // can only be set from within this class
{
if (value != _nodes)
{
// do additional logic

_nodes = value; // set the backing variable
}
}
}

public void AddNode(object Node)
{
Nodes.Add(Node);
}

public void RemoveNode(object Node)
{
Nodes.Remove(Node);
}

关于c# - 变量c#的附加赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52169046/

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