Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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_Class_Customization - Fatal编程技术网

VB.NET:向类添加其他函数

VB.NET:向类添加其他函数,vb.net,class,customization,Vb.net,Class,Customization,“Rectangle”类没有公开操作矩形所需的所有函数。 例如,我经常只想更改“.Bottom”值。 现有的函数都不允许这样做,我发现自己创建了一个新的矩形来做我需要的事情 这就引出了一个一般性问题: 是否可以向框架中的一个类添加其他函数,这些函数在我的整个项目中都可用?您可以 通过扩展类(如矩形) 创建一个包含矩形实例(有一个矩形)的自定义类,并添加其他属性和方法 请注意,您不能从矩形继承来扩展它的功能,因为它不是类,而是结构 下面是一个简单的扩展: Module RectangleExten

“Rectangle”类没有公开操作矩形所需的所有函数。 例如,我经常只想更改“.Bottom”值。 现有的函数都不允许这样做,我发现自己创建了一个新的矩形来做我需要的事情

这就引出了一个一般性问题: 是否可以向框架中的一个类添加其他函数,这些函数在我的整个项目中都可用?

您可以

  • 通过扩展类(如
    矩形
  • 创建一个包含
    矩形
    实例(有一个矩形)的自定义类,并添加其他属性和方法
  • 请注意,您不能从
    矩形继承来扩展它的功能,因为它不是
    ,而是
    结构

    下面是一个简单的扩展:

    Module RectangleExtensions
    
        <System.Runtime.CompilerServices.Extension()> _
        Public Sub Move(rectangle As Rectangle, x As Int32, y As Int32)
            rectangle.Location = New Point(x, y)
        End Sub
    
    End Module
    
    你可以用。但有一个缺点:不能以这种方式使用类的任何私有或受保护成员

    另一方面,您可以尝试创建自己的类并从该类继承,但有两个可能的缺点:

    • 您仍然不能使用该继承类中的任何私有成员(但可以使用受保护的成员)
    • 并不是框架中的每个类都可以被继承——其中一些类被标记为密封的,不能被继承

    是的。你可以用扩展方法来做。只是要挑剔一点,但Bottom是一个加上Y和Height属性计算出来的值(这就是只读的原因),你打算如何更改矩形的底部,修改Y或矩形的高度?我明白你的观点,我同意你的观点,因为它的一部分是如何设计的。但是,同样的,能够改变X和Y有什么用呢?或者有一个.充气方法,但没有过载,这将允许我只在一侧充气,而不是收缩/膨胀它,并让X和Y随它一起改变。对我来说,这看起来像“是的,让我们把最常见的函数/方法添加到矩形中”,在回家的中途,他们注意到他们必须在某个地方画一条线。对我来说,他们画得太早了。你能告诉我在哪里规定底部是只读属性吗?
    Dim rec = New Rectangle(New Point(100, 100), New Size(50, 50))
    rec.move(100, 200)