gpt4 book ai didi

vb.net - 是否可以在 VB.net 中声明本地/类实例成员引用变量以读取/更新另一个变量引用的同一对象

转载 作者:行者123 更新时间:2023-12-02 08:47:26 24 4
gpt4 key购买 nike

在 C++ 中,可以这样做:

int x;
int& foo = x;

// foo is now a reference to x so this sets x to 56
foo = 56;

但是在 Visual Basic .net (VB.net) 中是否存在等效项?

我知道 VB.net 中的 ByRef 术语,但我只在通过引用函数/子例程传递参数时看到(并且通过广泛的研究)这个术语,以便函数修改相同的调用代码声明的变量。

但我还没有看到 ByRef 用于声明变量(作为类成员或局部变量)。我曾尝试使用 ByRef 来做这样的声明,但我尝试声明的每个顺序都会遇到编译器错误。

我之所以要这样做是因为我希望一个类实例能够引用另一个类实例中声明的变量。

具体来说,我正在处理一些现有的 VB.net 代码,其中程序逻辑与 VB.net 表单类中的 UI 逻辑混合在一起。我想将程序逻辑从表单代码中分离出来,以便更容易地重用。为此,我需要程序逻辑代码能够与表单代码“对话”,因此我需要访问它的变量。

我正在使用带有 VB.net 的 Visual Studio 2010 Express,并且更愿意留在这个环境中,即使我知道完整的 Visual Studio 具有扩展功能。

最佳答案

指针存在,但它们被称为对象引用

(现在其他发帖者,请不要在这里争论实际差异。我说的是 OP 想要完成的高级任务)

显然,您不能照字面意思去做您所说的 - 也就是说,像外科手术一样操纵一个成员。但是,如果您可以控制代码,您几乎也可以做到。根据您所描述的问题,这种方法会好得多,因为您可以传递对具有许多您希望更新的成员的对象的引用,而不必传递许多单独的指针。

首先定义一个类:

Class MyScreenValues
' Properties will work... using public fields for brevity
Public TextBox1Value as String
Public SpinControl1Value as Integer
public CheckBox1Value as Boolean
End Class

现在相当于您发布的代码:

Dim x as new MyScreenValues    'int x; 
dim foo as MyScreenValues = x 'int& foo = x;
'// c++: foo is now a reference to x so this sets x to 56
'// .net: foo is now a reference to x so this sets x.SpinControl1Value to 56
foo.SpinControl1Value = 56;

如果您正在做的是尝试将指针传递给例如表单值上的每个控件到子项,就像这样:

Button1_Click(...
Dim MyObject as new BusinessObject
MyObject.DoSubmit(TextBox1.Text, SpinButton1.Value, CheckBox1.Checked)

可以使用superDeveloper提供的方法,在DoSubmit Sub的定义上使用ByRef关键字:

Public Sub DoSubmit(ByRef Name as String, ByRef Age as Integer, ByRef Employed as boolean)
... business logic...

然而,这只会给你一个 2 层分离。查看 MVP、MVC 等——但是请考虑提交整个 View 的数据值(value)。你可能会用你现在拥有的东西来解决很多研究。例如,您的业务逻辑将在表单上更改表单值时触发事件(好吧,实际上,由于 VB 处理 byref 属性 [=temp 变量] 的方式,它们在子退出之前不会触发,但它需要考虑)。

您还可以使用其他库将对象的属性映射到表单的属性。在网络上查看 VALUE INJECTOR。它可以采用 webform/winform,甚至可能是 WPF 表单,并将控件值映射到您预定义的对象或从中映射。非常适合完全分离。

关于vb.net - 是否可以在 VB.net 中声明本地/类实例成员引用变量以读取/更新另一个变量引用的同一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11415250/

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