【发布时间】:2019-10-31 21:47:39
【问题描述】:
在 VBA 中,如果我要修改它们的属性值,我会不断地将类实例作为参数传递给它们自己的方法。举一个极其简化的 C# 示例:
class WhateverClass
{
public void DoSomething(WhateverClass whateverClass)
{
whateverClass.WhateverProperty = "Hello"
}
}
在 C# 中,我可以避免像这样使用this 将调用的类实例作为参数传递吗?还是this 会引用默认的类实例?
class WhateverClass
{
public void DoSomething()
{
this.WhateverProperty = "Hello"
}
}
【问题讨论】:
-
没有“默认类实例”这样的东西。
-
VBA / VB 6(显然是 VB.NET)的概念大致相当于 @RufusL 的具体形式。因此,如果一个表单名为
Form1,那么您可以使用Form1而无需对其进行更新。但它并不适用于表格之外。 这在实践中也是一场噩梦。 -
@mjwills 我完全同意,这就是为什么我对不必要地将调用实例作为参数传递如此挑剔的原因,因为我试图坚定地避免这个问题。
-
只是为了澄清 VBA / VB6 方面的事情。类/表单是否具有默认实例由属性
VB_PredeclaredId的值决定。对于表单,默认为True,对于其他类,默认为False。但是,可以通过操作导出的代码并重新导入来更改它。 -
@mjwills stateful 默认实例是邪恶的/烦人的。就像 C# 中的
static状态一样。 VBA 中的默认实例对于实现例如非常有用。工厂方法。明智地使用默认实例是一种工具,就像 C# 中的static方法一样。它们是否被误用和滥用并不会剥夺它们的用处!
标签: c#