- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是从一个类开始处理与TCP服务器的客户端连接。这是我到目前为止编写的代码:
Imports System.Net.Sockets
Imports System.Net
Public Class Client
Private _Socket As Socket
Public Property Socket As Socket
Get
Return _Socket
End Get
Set(ByVal value As Socket)
_Socket = value
End Set
End Property
Public Enum State
RequestHeader ''#Waiting for, or in the process of receiving, the request header
ResponseHeader ''#Sending the response header
Stream ''#Setup is complete, sending regular stream
End Enum
Public Sub New()
End Sub
Public Sub New(ByRef Socket As Socket)
Me._Socket = Socket
End Sub
End Class
System.Net.Sockets.Socket
实例的引用,是吗?
Socket
属性上,设置值时,需要将其设置为
ByVal
。我的理解是复制了内存中的实例,并将这个新实例传递给
value
,并且我的代码将
_Socket
设置为引用内存中的该实例。是?
最佳答案
我认为您混淆了引用与值类型以及ByVal
与ByRef
的概念。即使它们的名称有点误导,但它们是正交的问题。
VB.NET中的ByVal
意味着将提供的值的副本发送到该函数。对于值类型(Integer
,Single
等),这将提供值的浅拷贝。对于较大的类型,这可能效率不高。但是,对于引用类型(String
,类实例),将传递引用的副本。由于副本是通过=
传递给参数的突变形式,因此调用函数将看不到该副本。
VB.NET中的ByRef
意味着对原始值的引用将发送到函数(1)。就像原始值直接在函数中使用一样。像=
这样的操作将影响原始值,并在调用函数中立即可见。Socket
是引用类型(读取类),因此将其与ByVal
一起传递很便宜。即使它确实执行了副本,也只是引用的副本,而不是实例的副本。
(1)这不是100%正确,因为VB.NET实际上在 call 站点上支持多种ByRef。有关更多详细信息,请参见博客条目The many cases of ByRef。
关于vb.net - ByRef vs ByVal澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4383167/
我有以下代码: Sub AddValidation() Dim ws, wsDefinitions As Worksheet Set ws = ThisWorkbook.Worksheet
我想我最近(终于)开始掌握 ByVal 和 ByRef 在 VBA 中的工作方式。 观察结果 在我迄今为止读过的所有教程和引用文献中,ByRef 始终是“传递对象”,ByVal 是“传递对象的副本”
我正在从 Excel 电子表格中导出多个 INI 文件,其中一行表示一个 INI 文件,INI 部分和键是列。到目前为止,这工作得很好,除了似乎 VBA 正在传递字典 ByRef (?),但让我解释一
我在 Access 2013 中使用 VBA。 在常规模块中有 2 个过程,RunProc() 和 PopulateCollection() 当执行RunProc时,它会调用PopulateColle
我认为我遗漏了一些关于数据表如何工作的基本知识。以下过程以 GetData 开头,引入what作为填充的数据表。以下代码所做的全部工作是传递数据表的副本,对其进行操作,然后返回它: Sub GetDa
我认为我遗漏了有关 DataTables 工作原理的一些基本知识。以下过程以 GetData 开始,将 what 作为填充的 DataTable 引入。以下所有代码所做的就是传递数据表的副本,对其进行
我正在观看一些关于 Nodejs 的介绍类型视频。我遇到了一个我想出来的问题,但我想了解“为什么”。这是有问题的原始代码: var http = require("http"); va
我正在 VBA 上制作一个宏,该宏附加到 excel 中的数据验证列表。当从列表中选择某个选项时,我希望它运行分配给该选择的宏。但是我反复收到错误“编译错误。参数不是可选的。我知道我需要在调用宏后添加
我不需要这个声明,因为它只会使我的代码变得庞大且不可读。 有没有办法让 Visual Studio (VS) 不自动添加它。每次我删除它时,它都会被 VS 添加回来。 Function DoStuff
有什么不同?我总是使用 ByVal,但是,我真的不知道什么时候应该什么时候不应该...... 最佳答案 ByRef = 你给你的 friend 你的学期论文(原件),他会做标记并可以退还给你。ByVa
在 ByRef 和 ByVal 之间进行选择时需要考虑哪些事项。 我理解两者之间的区别,但我不完全理解 ByRef 是否节省资源,或者我们是否需要在 .Net 环境中担心这一点。 如果功能在某种情况下
ByRef 与 ByVal 会生成错误!? 我有一个使用对象的方法 Function Foo(ByRef bar as CustomObject) as Boolean 此方法生成错误,因为一些奇怪的
我尝试尝试 JaredPar ByRef vs ByVal Clarification 回答的问题 ByVal in VB.NET means that a copy of the provided
当我进行提取方法重构时,ReSharper 总是想把 ByVal 修饰符放在任何地方。不再需要显式放置 ByVal 并且 Visual Studio 本身 doesn't do that anymor
我正在从 asp.net 应用程序调用一个 dll(用 vb6 编写)。我正在调用 dll 的以下函数: Public Function FamIdentify_BYTE(strName As Str
我正在学习 C++ 在线类(class) (Pluralsight.com),并在模板上进行练习,特别是将实际数字(例如 3 )传递给需要 (T& t) 的模板。 . 讲师编写的代码无法在我的 PC
我正在使用第三方 C++ dll,它使用具有以下签名的函数: extern "C" __declspec(dllimport) int __stdcall CalcDDtable(struct ddT
我知道 C# 中的默认值是 ByVal。我在很多地方使用了相同的变量名,然后我注意到传递的值发生变化并返回。我想我知道 C# 的作用域机制是错误的。这里公共(public) license 覆盖本地
在 VB.NET 中,用于方法参数更快,ByVal或 ByRef ? 此外,哪个在运行时(RAM)消耗更多资源? 我通读了this question ,但答案不适用或不够具体。 最佳答案 Byval
我正在使用事件处理程序,如果选择一个或两个单元格,我会运行某些事件。我遇到的问题是,当选择两个单元格时,我不知道如何访问第二个单元格的属性(即它的值是什么)。知道如何访问所选的第二个单元格的值(我希望
我是一名优秀的程序员,十分优秀!