我是OOP的新手并且有一个施工问题。
我有一个名为Person的类,包含子类(StrongPerson,CrazyPerson等)。 Person类有许多属性,其中之一是Property Strength。
Public Class Person
private m_Strength as integer
Protected Property Strength() as Integer
End Class
Public Class StrongPerson
Inherits Person
...
End Class
每个子类都有自己的Strengthvalue。例如。 StrongPerson的值为10.我看到了编码的两种可能性。要么我在子类中设置10(但我不知道如何做到这一点)或者我在初始化期间设置了10。编码的常见或首选方式是什么?
答案 0 :(得分:0)
由于Property Strength()
是子类必须为其提供值的超类的属性,因此您至少有两种有效的方法来实现它:
strength
,并将其存储在m_Strength
m_Strength
成员。这将强制Person
类是抽象的。所有子类都需要为Strength
属性提供自己的getter实现,并返回自己的常量。您还可以使m_Strength
受保护,并将其设置在子类的构造函数中。这个选择非常脆弱,因为实现子类的程序员可能忘记设置强度,编译器无法帮助他们发现这个问题。此方法应限于m_Strength
具有适用于大多数时间的非常好的默认值的情况。
答案 1 :(得分:0)
如果类本身决定其属性值是什么,那么它不应该有setter
。您可以使用虚拟计算属性,然后可以在子类中覆盖它。
class Person
{
protected virtual int Strength //can be abstract
{
get { return 0; }
}
}
class StrongPerson : Person
{
protected override int Strength
{
get { return 10; }
}
}
class WeakPerson : Person
{
protected override int Strength
{
get { return 2; }
}
}
对于VB.Net版本,您可以使用此online converter