注意:这个问题是用类似C#的伪代码编写的,但我真正要问的是哪些语言有解决方案。请不要被语法所困扰。
假设我有两个类:
class AngleLabel: CustomLabel
{
public bool Bold; // Just upping the visibility to public
// code to allow the label to be on an angle
}
class Label: CustomLabel
{
public bool Bold; // Just upping the visibility to public
// Code for a normal label
// Maybe has code not in an AngleLabel (align for example).
}
他们都是来自同一个类:
class CustomLabel
{
protected bool Bold;
}
在下级类中,粗体字段是公开的。
类上没有可用的接口。
现在,我有一个想要传递自定义标签并设置粗体属性的方法。是否可以在不必要进行以下步骤的情况下完成:1)找出对象的真实类别,2)将其强制转换为该对象,然后3)为每种标签类型的每个变量制作单独的代码以设置粗体。就像这样:
public void SetBold(customLabel: CustomLabel)
{
AngleLabel angleLabel;
NormalLabel normalLabel;
if (angleLabel is AngleLabel )
{
angleLabel= customLabel as AngleLabel
angleLabel.Bold = true;
}
if (label is Label)
{
normalLabel = customLabel as Label
normalLabel .Bold = true;
}
}
也许可以在一个变量上进行加粗处理,然后再创建一个类来公开这个加粗的变量,并将自定义标签转换为该类。
这样能行吗?
如果可以,那么哪些语言可以实现呢?(这个例子来自 Delphi 5 的旧版本)。我不知道它是否适用于该语言(我仍需要尝试一下),但我很想知道它是否适用于 C++、C# 或 Java。
如果不行,有什么其他方法可以实现吗?(请记住没有提供接口,也不能修改类。)
有人猜测吗?
AngleLabel
和Label
不能共用Control
的bold
标志吗?为什么它们必须有自己的标志?(如果Control.bold
与问题无关,为什么要显示它?) - sbibold
字段,而实际上你只是想说明它们仅改变了从祖先类继承的字段的访问方式。 - Rob Kennedy