VB中"公共共享"子/函数的含义

osd*_*ech 8 vb.net vb6-migration

任何人都可以在VB中解释我需要使用Public Shared Sub,因此可以从其他表单访问它.

但这个"公共"和"共享"意味着什么?

  • 谁是公众
  • 与谁分享

如果是公共共享,这是否意味着其他一些软件或"某些黑客应用程序"可以更轻松地访问此子及其价值?

dwe*_*ner 7

在VB.NET中,Shared等同static于C# - 意味着成员属于类,而不是它的实例.您可能认为此成员在所有实例中都是"共享",但这在技术上并不正确,即使VB.NET将Shared通过实例调用解析成员.

public class1
    public shared something as string
    public somethingelse as string
end class
Run Code Online (Sandbox Code Playgroud)

以下代码说明了VB.Net如何允许您访问这些:

...
class1.something = "something" 'belongs to the class, no instance needed

dim x as new class1() with {.somethingelse = "something else"}

Console.WriteLine(x.somethingelse) 'prints "something else"

Console.Writeline(class1.something) 'prints "something" <- this is the correct way to access it

Console.Writeline(x.something) 'prints "something" but this is not recommended!
...
Run Code Online (Sandbox Code Playgroud)

Public 表示任何链接程序集都可以查看和使用此成员.


RBa*_*ung 5

访问Public器关键字仅表示方法、属性等在定义它的 DLL 或程序集外部可见且可调用。

Shared关键字意味着该方法等不是“实例化”的。也就是说,它只是定义的一部分,而不是从该类定义创建(“实例化”)的对象的一部分。这有两个主要影响:

  1. 可以随时调用 Shared 方法,而无需实际拥有该类的对象/实例。和,
  2. 共享方法无法访问类定义的任何非共享部分(除非将对象实例传递给它)。他们只能直接访问类定义的其他共享部分。