9

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

但是这个“公共”和“共享”是什么意思呢?

  • 谁是公开的?
  • 与谁共享

如果它是公开共享的,这是否意味着其他一些软件或“一些黑客应用程序”可以更容易地访问这个子及其价值?

4

2 回答 2

9

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

public class1
    public shared something as string
    public somethingelse as string
end class

以下代码说明了 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!
...

Public表示任何链接程序集都可以看到和使用该成员。

于 2012-10-20T19:05:02.707 回答
4

访问器Public关键字仅仅意味着方法、属性等在定义它的 DLL 或程序集之外是可见和可调用的。

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

  1. 可以随时调用 Shared 方法,而实际上没有该类的对象/实例。和,
  2. 共享方法不能访问类定义的任何非共享部分(除非将对象实例传递给它)。他们只能直接访问 Class 定义的其他 Shared 部分。
于 2012-10-20T19:05:51.943 回答