Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET如何允许人们实现一个类而不让人们看到或更改代码?_Vb.net - Fatal编程技术网

VB.NET如何允许人们实现一个类而不让人们看到或更改代码?

VB.NET如何允许人们实现一个类而不让人们看到或更改代码?,vb.net,Vb.net,如何允许人们在不让他们看到或更改代码的情况下实现类?您应该使用private关键字来防止类的客户端直接访问或修改字段。您可以通过public或protected关键字(用于继承)公开希望客户端访问的方法和属性。实现意味着接口。您可以在提供给上述人员的.NET程序集(.dll)中定义一个接口。接口中没有实现。除了属性、方法名称和类型之外,没有要更改的代码 Public Interface IFoo Sub Bar() End Interface 如果此代码在代码文件中提供给用户,则用户可

如何允许人们在不让他们看到或更改代码的情况下实现类?

您应该使用
private
关键字来防止类的客户端直接访问或修改字段。您可以通过
public
protected
关键字(用于继承)公开希望客户端访问的方法和属性。

实现意味着接口。您可以在提供给上述人员的.NET程序集(.dll)中定义一个接口。接口中没有实现。除了属性、方法名称和类型之外,没有要更改的代码

Public Interface IFoo
    Sub Bar()
End Interface
如果此代码在代码文件中提供给用户,则用户可以更改接口的定义

还有一个抽象类,在VB中称为MustInherit。其他类可以继承或从中派生(如您的问题所述,不是实现,但您可能是这个意思)

如果您在代码文件中将其提供给用户,他们可以更改
Bar()
中发生的事情,或者真正做任何他们想做的事情。同样,将其放入.NET程序集中并将.dll提供给用户可以防止这种情况发生。在大多数情况下,这足以防止人们更改您的代码

可以通过将项目的输出类型设置为类库来实现这一点。这将编译成一个.dll文件

构建项目。输出目录中将有一个.dll文件(如果编译成功)

然后,您或其他人可以在新项目中添加对类库创建的.dll文件的引用。您可以声明一个实现其中定义的公共接口的类

Public Class MyIFoo
    Implements WindowsApplication1.IFoo

    Public Sub Bar() Implements WindowsApplication1.IFoo.Bar

    End Sub
End Class
和/或创建一个继承在.dll中创建的抽象类的类

Public Class MyFoo
    Inherits WindowsApplication1.Foo

    Public Overrides Sub Barr()

    End Sub
End Class

在新项目中,您无法查看或更改接口IFoo或抽象类Foo的代码。

您始终可以1)将类编译为二进制程序集,2)将程序集写入.dll并对其进行加密,然后3)解密.dll并在运行时动态加载。但这似乎有点极端,不是吗?问:使用“private”简化有什么不对?请更具体一点。“实现类”是什么意思?你是说写一个实现接口的类,还是别的什么?你想让人们看不到什么代码?很难弄清楚你想要支持什么样的场景。这个答案与“允许人们实现一个类”或“不让他们看到或更改代码”有什么关系?@Verdolino我之前对这个有点模糊的问题的解释让我找到了这个答案。Alfie可能指的是创建一个程序集,在这种情况下,您的答案很好!
Public Class MyFoo
    Inherits WindowsApplication1.Foo

    Public Overrides Sub Barr()

    End Sub
End Class