1
5
在大喊大叫之前先想一想。如果有任何方法可以调用任何对象上的事件,这会不会破坏封装,也会造成混淆?事件的意义在于,具有该事件的类的实例可以通知其他对象发生了某个事件。事件 也就是说,如果您想允许某种中介类为您发送事件,只需使用add和remove处理程序打开事件声明。然后你可以这样做:
|
2
4
允许任何人提出任何事件都会让我们陷入这个问题:
这个模型是为了保护你不去写那些很容易出现无效状态的应用程序,这是最常见的bug来源之一。 |
3
2
我想你误解了限制。这试图说明的是,只有声明了事件的类才应该真正引发它。这不同于编写一个静态助手类来封装实际的事件处理程序实现。
如果是
对于一个班级来说
您不希望代码看起来像:
改变是完全合法的
|
4
1
首先,我必须说,事件实际上意味着只有当任何外部事件处理程序连接到对象时才从对象内部调用。 因此,基本上,事件会给您一个对象的回调,并给您一个机会将处理程序设置为该对象,以便在事件发生时自动调用该方法。
如果您不想在每个类上都执行这样的操作,那么可以轻松地创建一个EventInvoker来定义每个类,并在它的构造函数中传递委托。
因此,基本上你在这些方法中的每一个上创建一个代理类,使这个泛型可以让你为任何事件调用事件。这样您就可以轻松避免每次调用这些属性。 |
5
1
你不能通过从外部触发一个事件来导致某些事情发生,你只会让每个事件订阅者认为它已经发生。使某事发生的正确方法是实际地使它发生,而不是使它看起来像它发生了。
|
6
1
更新好的,在我们进一步讨论之前,我们肯定需要澄清一点。 你似乎希望这样:
你真的想这样写你的代码吗?这真是太棒了
完全地
不可能的
“鲍勃”知道吗
@马西亚斯刚把信封上的地址从我的改成了别人的!
当然,你说什么
能够 允许类的私有成员引发该类的某个事件可能有好处,例如在您描述的场景中。而当 saurabh's idea 是一个很好的方法,显然,它不能总是应用,因为C#缺少多重继承*。 这让我明白了我的意思。为什么? 是否允许多重继承?我知道这看起来有点离题,但这个问题和那个问题的答案是一样的。这并不是说它是非法的,因为它“永远”没有意义;它是非法的,因为它的利大于弊。 就是说,是的, the general case Rex has described 对引发其他对象事件的对象进行了很好的论证。情景 另一方面,描述——样板代码的不断重复——似乎有点道理 这种行为。问题是:哪种考虑应该给予更大的重视?
假设.NET设计师决定允许这样做,只是希望开发人员不要滥用它。几乎可以肯定会有
许多
相反的情况呢?如果他们不允许呢?当然我们只是在考虑现实,因为 是 这个案子。但这里的巨大缺点是什么?你必须在一堆地方复制和粘贴相同的代码。是的,这很烦人;但是,也有一些方法可以缓解这种情况(比如saurabh的基类思想)。事件的发生是由声明类型严格定义的, ,这使我们对程序的行为有了更大的把握。 所以: EVENT POLICY | PROS | CONS ------------------------------+---------------------+------------------------- Allowing any object to raise | Less typing in | Far less control over another object's event | certain cases | class behavior, abun- | | dance of unexpected | | scenarios, proliferation | | of subtle bugs | | ------------------------------------------------------------------------------ Restricting events to be only | Much better control | More typing required raised by the declaring type | of class behavior, | in some cases | no unexpected | | scenarios, signifi- | | cant decrease in | | bug count |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |