【发布时间】:2013-03-01 03:19:32
【问题描述】:
我正在将一个 VB.Net 应用程序转换为 C#,并注意到在 VB.Net 代码中,有一个私有成员变量,它使用 Me 初始化,如下所示:
Private m_ClassA As New MyCollection(Of ClassA)(Me)
当我将它转换成这样的 C# 代码时:
private MyCollection<ClassA> _classA = new MyCollection<ClassA>(this);
我有错误
参数是
value,而参数类型是ref。
如果我把ref 放在参数this 前面,我会得到错误
不能在成员初始化器中使用
this。
我在这里读到成员在基类之前初始化,因此this 不能在成员中使用,因为它可能尚未初始化。我的问题是为什么它在 VB.Net 而不是 C# 中是合法的?
这取决于编译器处理它的方式不同吗?两者的行为不同,这似乎很奇怪。
为了解决这个问题,我想我会在构造函数中初始化成员。
【问题讨论】:
-
听起来你已经回答了你的问题。
-
什么是
MyCollection? -
什么是
ClassA和MyCollection?很容易做出可能是错误的假设...MyCollection是否已使用不必要的ref参数声明? -
尝试使用反编译器获取IL代码。在某处回答。
-
MyCollection is Public Class MyCollection(Of T) Inherits ObjectModel.Collection(Of ClassA) 由于某种原因,MyCollection 在构造函数中确实有一个 ref 参数,我也将其删除。