小编Tim*_*ter的帖子

C#::何时使用事件或从事件处理接口派生的对象集合?

我认为这是一个简单的"问题",我已经找到了几个解决方案,但我不知道哪种方式可以用于C#中的最佳实践.

在应用程序的生命周期中,我有一个主对象(比如一个单例).这个"MasterClass"创建了一堆新类型的对象,每次调用MasterClass.Instance.CreateSlaveObject时都说"SlaveClass".

此MasterClass还监视其他一些对象的状态更改,当发生这种情况时,通知它创建的SlaveClass对象的更改.看起来很简单.

因为我来自本地C++世界,所以我首先使用它来创建一个接口

Interface IChangeEventListener
{
    void ChangeHappened();
}
Run Code Online (Sandbox Code Playgroud)

我从中派生出"SlaveClass".然后在我的"MasterClass"中,我有:

...
IList<IChangeEventListener> slaveList;
...
CreateSlaveObject
{
    ...
    slaveList.Add(slave);
}
...
ChangeHappened()
{
    ...
    foreach(var slave in slaveList)
    {
       slave.ChangeHappened();
    }
}
Run Code Online (Sandbox Code Playgroud)

这很有效.但是我一直在想,如果有另一种(更好的)方法可以做到这一点.所以我对这个主题进行了更多研究,并看到了C#事件.

因此,我不是在MasterClass中维护一个奴隶集合,而是将MasterClass注入到SlaveClass的ctor中(或通过一个属性),让SlaveClass对象将它的ChangeHappened作为事件处理程序添加.这将说明:

  ...Master...          
  public delegate void ChangeHappenedDelegate(object sender, NewsInfoArgs args);
  public event NewUpdateDelegate ChangeHappenedEvent;
  ....

  public SlaveClass (MasterClass publisher) //inject publisher service
  {
      publisher.ChangeHappenedEvent += ChangeHappened;
  }
Run Code Online (Sandbox Code Playgroud)

但这似乎是Slave和Master之间不必要的耦合,但我喜欢所提供的内置事件通知机制的优雅.

那么我应该保留当前的代码,还是转向基于事件的方法(使用发布者注入)?为什么?

或者,如果您可以提出我可能错过的替代解决方案,我也会感激.

.net c# collections events delegates

5
推荐指数
1
解决办法
2750
查看次数

使用(i,j)=> i +"delimiter"+ j将List <int>聚合为字符串

我想在Linq(C#)中做一个类似Haskell的快速​​聚合,将List转换成格式为"i ^ j ^ k ..."等的字符串.

这可能在一个查询中,或者我应该只是做旧的fasioned

foreach (int i in list)
{
     string+= i + "^"
}
Run Code Online (Sandbox Code Playgroud)

(ps是的,那是伪代码,不会编译.)

c# linq

5
推荐指数
2
解决办法
1万
查看次数

淡入淡出屏幕

在C#windows窗体应用程序中.我有一个启动画面,后台发生了一些多线程进程.我想要做的是当我最初显示启动画面时,我希望它看起来"淡入".然后,一旦所有过程完成,我希望看起来好像启动画面"淡出".我正在使用C#和.NET 2.0.谢谢.

c# splash-screen .net-2.0 winforms

4
推荐指数
2
解决办法
1万
查看次数

如何在使用自动实现的属性时将字符串初始化为""

当使用自动实现的属性时,如何将字符串设置为"":

public string Blah {get; set;}
Run Code Online (Sandbox Code Playgroud)

c#

3
推荐指数
2
解决办法
6536
查看次数

在脚本执行期间显示启动画面

我想知道如何在脚本执行期间在用户屏幕上显示启动画面(如gif或jpeg文件).

谢谢您的帮助.

javascript php jsp splash-screen

2
推荐指数
1
解决办法
5562
查看次数

标签 统计

c# ×4

splash-screen ×2

.net ×1

.net-2.0 ×1

collections ×1

delegates ×1

events ×1

javascript ×1

jsp ×1

linq ×1

php ×1

winforms ×1