有可能以某种方式缩短这种说法吗?
if (obj != null)
obj.SomeMethod();
Run Code Online (Sandbox Code Playgroud)
因为我碰巧写了很多东西而且很烦人.我唯一能想到的就是实现Null Object模式,但这并不是我每次都能做到的,而且它肯定不是缩短语法的解决方案.
和事件类似的问题,在哪里
public event Func<string> MyEvent;
Run Code Online (Sandbox Code Playgroud)
然后调用
if (MyEvent != null)
MyEvent.Invoke();
Run Code Online (Sandbox Code Playgroud) 这两个选项之间的真正区别是什么?我所知道的是:
注册COM Interop
此选项在程序集上执行regasm,并将程序集注册为注册表中的COM组件(或者可能不是),所有COM类似注册表项.此步骤是否生成TLB文件?还做了什么?
有时我看到在编译项目时会生成tlb但有时不会,这是为什么?
使装配COM可见
这个装配对装配有什么影响?如果我在这个程序集中有以下类型,即使我的类型被标记为ComVisible,我仍然需要指定"使程序集COM可见"吗?
[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}
Run Code Online (Sandbox Code Playgroud) 我仍然试图围绕VBA中的接口和事件如何协同工作(如果有的话).我即将在Microsoft Access中构建一个大型应用程序,我希望尽可能灵活和可扩展.为此,我想利用MVC,接口(2)(3),自定义集合类,使用自定义集合类引发事件,找到更好的方法来集中和管理由窗体上的控件触发的事件,以及一些额外的VBA设计模式.
我预计这个项目会变得非常毛茸茸,所以我想尝试在VBA中一起使用接口和事件的限制和好处,因为它们是我认为在VBA中真正实现松散耦合的两种主要方式(我认为).
首先,有一个问题是在尝试在VBA中一起使用接口和事件时引发的错误.答案指出"显然不允许事件通过接口类传递到具体类中,就像你想使用'Implements'一样."
然后我在另一个论坛的答案中找到了这个陈述:"在VBA6中,我们只能引发在类的默认接口中声明的事件 - 我们不能引发在Implemented接口中声明的事件."
因为我还在寻找接口和事件(VBA是我真正有机会在现实环境中尝试OOP的第一种语言,我知道不寒而栗),我无法在脑海中彻底解决所有问题这意味着在VBA中一起使用事件和接口.听起来你可以同时使用它们,听起来有点像你不能.(例如,我不确定上面的"一个类的默认接口"与"一个已实现的接口"是什么意思.)
有人能给我一些基本的例子,说明在VBA中一起使用接口和事件的真正好处和局限吗?