可覆盖的常数?

Jas*_*son 0 vb.net asp.net constants

也许我应该把它变成一个公共成员,但我一直认为它应该是一个常数.

情景

我有表格我正在渲染成PDF(使用iTextSharp).在代码中,表单本身都继承了一个基类(OrderForm).在内部OrderForm,有一个常量列表,我在用于对齐PDF渲染的东西时用于测量,例如LEFT_MARGIN,等等.这些常量用于几个函数中以确定事物的去向.

所有表格几乎相同,因为它们由相同的组件(标题,地址框,项目等)组成.但是,表格的布局略有不同......在一种形式上,地址框距离右侧一英寸(适合我雇主使用的信封窗口).

问题

而不是创建常数的转换对于每个保证金,填充等等等等用于基础类中的每个的形式,例如:PURCHASE_ORDER_LEFT_MARGIN,INVOICE_LEFT_MARGIN等,它不会是最好创建可重写的LEFT_MARGIN,可以在"inheritee"中设置[原文对象?我的理由是它一个常量,不会在该对象内发生变化,只能形成形式,但基类中的渲染将保持相对于常量的任何形式.

我知道我可以简单地创建一个公共成员并设置其价值,但我想知道正确的方法来解决这个问题.

谢谢.

Joh*_*n K 5

常量是隐式静态的(共享).

改为使用Readonly 属性,然后您可以随时随地选择覆盖它.

一个简单的例子......

Class BaseClass

    ' Assume this field is set with a value from somewhere else'
    Private _leftmargin As Integer

    Overridable Readonly Property LEFT_MARGIN  As Integer
        Get
            Return _leftmargin
        End Get
    End Property
End Class

Class DerivedClass1
    Inherits BaseClass

    Overrides Readonly Property LEFT_MARGIN  As Integer
        Get
            Return 5 'specialized case for this class'
        End Get
    End Property
End Class

Class DerivedClass2
    Inherits BaseClass

    'uses base class LEFT_MARGIN'

End Class
Run Code Online (Sandbox Code Playgroud)