那么这是什么意思,我该如何解决?
如果我将New关键字放在下面的行中,则会出现此消息。如果我删除它,我在运行时收到错误,说我需要使用New。我做错了什么?
Dim oPS As AeccPointStyle = New AeccPointStyle
ops = oDescKey.PointStyle
Debug.Print(oPS.Name)
Debug.Print(oPS.MarkerSymbolName)
也试过
Dim oPS As New AeccPointStyle
ops = oDescKey.PointStyle
Debug.Print(oPS.Name)
Debug.Print(oPS.MarkerSymbolName)
谢谢!
更新1 - 基于Meta-Knight的评论
1 -
Dim oPS As AeccPointStyle = Nothing
oPS = oDescKey.PointStyle
2 -
Dim oPS As AeccPointStyle = oDescKey.PointStyle
两个版本都会抛出NullReferenceExceptions。
答案 0 :(得分:4)
AeccPointStyle的空构造函数被标记为friend,这意味着只有其程序集中的类可以调用它。
但是看看你的代码,我认为你不需要打电话给New。一开始就把它设置为Nothing。或者甚至更好,直接设置您的变量具有良好的值:
Dim oPS As AeccPointStyle = oDescKey.PointStyle
编辑您的NullReferenceException:
通常,在调用值为Nothing的对象的属性时会引发此类异常。在这种情况下,如果oDescKey设置为Nothing,则会引发此类异常。
如果oDescKey没有Nothing值,那么执行某些代码的唯一事情就是PointStyle属性。因此可以安全地假设PointStyle属性抛出NullReferenceException。尝试在调试器中观察oDescKey.PointStyle变量,您应该看到它抛出异常。
答案 1 :(得分:2)
如果你的AeccPointStyle类使用'朋友'修饰符, 即它被定义为:
Friend Class AeccPointStyle
或默认构造函数具有'Friend'修饰符, 即:
Friend Sub New()
并且您发布的代码不在同一个程序集中,您无法在此类上调用构造函数。为了使其工作,您必须将代码放在与AeccPointStyle类相同的程序集中。查看此页面以了解有关修饰符的更多信息:more information about modifiers
答案 2 :(得分:0)
我的猜测如下:AeccPointStyle
在另一个程序集中声明,而不是问题中的代码示例。 Sub New
的构造函数(AeccPointStyle
)被声明为Friend
,这意味着它只能在同一个程序集中访问。
您可以通过两种方式解决此问题
Sub New
,使其为Public
Shared Public Sub Create
,将创建并返回新的AeccPointStyle
答案 3 :(得分:0)
AeccPointStyle没有公共默认构造函数。您尝试使用的那个仅限于同一程序集中的其他类。
以下是我在网上找到的一些代码:
Dim oPointStyle As AeccPointStyle
Set oPointStyle = g_oAeccDoc.PointStyles.Add(strName)
请注意,g_oAeccDoc上的PointStyles属性(可能是某种PointStylesColleciton)正在实例化并为您返回一个新的AeccPointStyle实例。
答案 4 :(得分:0)
当您使用FRIEND作为您的类的访问修饰符时,您需要确保它自己的类和您使用它的类在同一个NAMESPACE中,否则您将收到此错误消息。
答案 5 :(得分:0)
对于遇到此问题的其他人,我必须对我们引用的旧项目进行单向升级。当它是 2.0/3.5 时,它也将其升级到 .NET 4.0。这导致旧版本的(也是旧的)项目在引用它时出现此错误。将新升级的版本改回 .NET 3.5 对我来说很有效。这是一个非常难以描述的错误!