抽象类/属性VB.Net

时间:2015-05-18 19:32:44

标签: vb.net inheritance properties abstract-class

我有一个名为CustomLabel

的自定义用户控件的抽象类
Private MustInherit Class CustomLabel
    Inherits System.Windows.Forms.UserControl

    'CustomLabels ALWAYS have these controls
    Private _SubLabel As Label
    Private _TextBox As Textbox

    'They also always have these properties, but their val. changes
    Private _LabelSize As Size
    Private _Color As Color
    'etc. etc.

    'getters and setters etc.'

    Public Sub New()

        'when setting up an instance of the child class,
        'I want to perform similar actions in the same order
        ConfigureControlBase()
        ConfigureSubLabel()
        ConfigureTextBox()

        Controls.AddRange(SubLabel, TextBox)

    End Sub

configure方法处理一些类似这样的样板:

Sub ConfigureSubLabel()
    With Me
        .SuspendLayout()
        .BackColor = Color.Transparent
        .TabStop = False
        .TextAlign = ContentAlignment.MiddleCenter
    End With
End Sub

在配置中,我有类似的东西

.BackColor = Color

这个想法是,当你调用new,然后又进行配置时,它会根据继承类中某些属性的值配置相应的控件。

我有两个子课程,BiggerLabelSmallerLabel

BiggerLabel本身大于SmallerLabel(自然地),并且其中的所有控件也按比例改变大小以反映该大小。与SmallerLabel相比,它的颜色也不同。

这是我感到困惑的地方。在孩子的new()构造函数中,我可以说Color = something,但编译器读取代码的顺序使它无法工作......例如它看到了

dim thisLabel as BiggerLabel = new BiggerLabel 

然后转到new() BiggerLabel,然后立即跳转到new() CustomLabel,根据默认值配置所有控件,然后返回到子类new()并更改属性的值。我最终将Color作为正确的值,但是.BackColor = Color是使用默认值设置的,所以即使基础数据最终是正确的,控件也是不对的。

从这里我想出了一个精彩的计划。我给了父类一个mustinherit SetProperties()并把它放在我所有的配置之前,所以当它被调用时,编译器被迫跳转到子类中该子类的继承版本,我会说这个大小现在=到x和color = y等。这总体看起来不直观,因为我总是以相同的顺序设置这些相同的值,并且所有子类都必须继承这个类。

我的下一个想法是让我的所有基类配置都没有明确地改变大小或颜色等内容,而只是配置不变的东西。然后我在子节点中覆盖它,调用base configure,它设置所有始终相同的数据(避免重复),然后返回到继承的sub来配置大小和颜色等内容。

这样做的缺点是现在每个继承的sub都必须调用base作为它的第一行,而且我必须总是以类似的顺序设置相同的值,这对我来说似乎是多余的。

基本上我希望能够说" CustomLabel将始终具有这些控件,并且它们将始终以这种方式和此顺序配置,但是对于BiggerLabel大小为w,color为x,并且对于SmallerLabel大小是y,颜色是z。

到目前为止,我觉得我对此工作的越多,我得到的就越混乱,关于vb.net抽象的详细谷歌搜索或者如何正确抽象的例子并没有给我带来太多好处。

哦,是的,并且将args传递给抽象的新构造函数对我来说似乎也是不可取的,因为我已经过了很多args。

我也研究了最重要的属性,但就像我说的那样,我开始被烧焦并对此感到困惑,因为我没有体验过vb(或一般的编码)和我&#39 ;如果没有进行大量的调试并逐步完成我的代码(我先前的两次迭代,跳转很多......让它更加混乱!),我不确定编译器的发展方向。

提前感谢任何愿意通过那里的文字墙进行斗争并提供帮助的人。它可能是我错过的一些非常简单的解决方案或编码实践。

0 个答案:

没有答案