gpt4 book ai didi

c# - 将 c# 转换为 vb.net。如何处理比较运算符和接口(interface)?

转载 作者:行者123 更新时间:2023-11-30 16:04:18 25 4
gpt4 key购买 nike

我正在将一个庞大的项目从 C# 转换为 VB。我遇到的问题之一是在 c# 中,我可以这样做:

    private ITreeModel _model;
[Category("Data")]
public ITreeModel Model
{
get { return _model; }
set
{
if (_model != value)
{
if (_model != null)
UnbindModelEvents();
_model = value;
CreateNodes();
FullUpdate();
if (_model != null)
BindModelEvents();
}
}
}

具体来说,我可以:

If _model != value Then

但是,因为该属性是一个接口(interface),所以当我尝试将其转换为 vb.net 时,它告诉我不能使用 <> 运算符。我什至在所有实现 ITreeModel 的类中重载了 = 和 <> 运算符,但无济于事。

我不能像编译器要我做的那样使用"is",因为当然它正在实现 ITreeModel 接口(interface),否则它永远不会得到这个属性!它询问两者是否不相等,重载 = 和 <> 不会使错误消失。

这里的天才们对我如何解决这个问题有什么想法吗?我正在寻找 vb.net 中的等效代码,它们将完成与 C# 代码相同的事情...

清除任何可能的混淆。 C# 代码测试是否相等。它在问,“这两个东西相等吗?”我意识到我可以做 a.Equals(b),但我不确定这是否是 c# 代码正在做的,因为 != 在 c# 中可能意味着不同的东西。

最佳答案

== Operator (C# Reference)

对于预定义的值类型,相等运算符 (==) 如果其操作数的值相等则返回 true,否则返回 false。 对于字符串以外的引用类型,如果它的两个操作数引用同一个对象,== 返回 true。对于字符串类型,==比较字符串的值。


Is Operator (Visual Basic)

比较两个对象引用变量。Is 运算符确定两个对象引用是否引用同一对象。但是,它不执行值比较。如果 object1 和 object2 都引用完全相同的对象实例,则结果为 True;如果他们不这样做,则结果为 False。

Is 也可以与 TypeOf 关键字一起使用来创建 TypeOf...Is 表达式,它测试对象变量是否与数据类型兼容。


Object.Equals Method (Object)

如果当前实例是引用类型,则 Equals(Object) 方法测试引用相等性,并且调用 Equals(Object) 方法等同于调用 ReferenceEquals 方法。引用相等意味着被比较的对象变量引用同一个对象

...您可以通过调用 ReferenceEquals 方法比较当前对象与另一个对象的引用相等性。在 Visual Basic 中,您还可以使用 Is 关键字(例如,If Me Is otherObject Then ...)。


所以你看到这两个运算符做同样的事情。所以你的问题的答案是这样的:

Public Interface ISomeInterface

End Interface

Public Class SomeObject
Private _someInterface As ISomeInterface



Public Property SomeInterface As ISomeInterface
Get
Return _someInterface
End Get
Set(value As ISomeInterface)
If (Not _someInterface Is value) Then
If (_someInterface IsNot Nothing) Then
DoSomething()
End If

_someInterface = value

If (_someInterface IsNot Nothing) Then
DoSomethingElse()
End If
End If
End Set
End Property



Public Sub DoSomething()

End Sub

Public Sub DoSomethingElse()

End Sub
End Class

关于c# - 将 c# 转换为 vb.net。如何处理比较运算符和接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35218042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com