【发布时间】:2019-05-23 19:49:05
【问题描述】:
我有三个类继承自我们称为 UpperCaseLetters 的更高基类。其中有类 LetterA、LetterB 和 LetterC。我希望构建一个接口,将它们分别连接到相应的子类LowerA、LowerB 和LowerC。我有一个接口,它有一个属性“UpperCaseLetter”,可以有效地存储或引用相应的大写字母。当我想在小写字母级别构造一个已知类型的单个对象时,这很好,因为我可以很容易地手动引用大写字母。
我需要构建一个能够查看我现有的大写字母集的脚本,并通过实现接口来构建相应的小写字母对象,这样我就可以得到一个小写字母对象,例如 LowerA,从引用它附加到的 LetterA 对象的接口实现属性。
在C#中,遍历一个循环,当我遇到一个似乎没有匹配的LowerCaseLetter对象的项目时,如何使用来自UpperCaseLetter子类(LetterA,LetterB或LetterC)的类型信息来动态构造一个对应的各个LowerCaseLetter 子类(LowerA、LowerB 或LowerC)的LowerCaseLetter 对象,而没有静态列出每个可用字母大小写的子类类型?
提前致谢
编辑:代码来说明我的意思:
class UpperCaseLetter {
public bool Italic
}
class LetterA : UpperCaseLetter {
}
class LetterB : UpperCaseLetter {
}
interface LowerCaseLetter {
public UpperCaseLetter OriginalLetter;
}
class LowerA : LetterA, LowerCaseLetter {
}
class LowerB : LetterB, LowerCaseLetter {
}
void BuildLowerCaseLetters {
foreach (var upperLetter in setOfImaginaryBuiltLetterObjects){
//below is how the code currently works, but any time I build a new pair of
//classes, say, LetterD and LowerD, this section needs to be modified.
//Looking for a dynamic solution
if (upperLetter is LetterA){
new LowerA();
} else if (upperLetter is LetterB){
new LowerB();
}
}
}
【问题讨论】:
-
能否包含一些代码来演示问题
-
不要迂腐,但“连接”在这个问题中是一个模棱两可的术语。可以通过多种方式关联类;请使用正确的,以便其他工程师知道您在说什么。如果你还没有找到合适的词来形容它,也许你还没有足够地考虑这个问题。我建议“大写字母”和“小写字母”之间没有继承关系,因为它们是互斥的,尽管它们可能都可以从简单的“字母”继承。
-
为什么要将
Letter与LowerCase和UpperCase分开?我确定您正在处理的实际代码是不同的,但如果类非常紧凑,也许最好重新设计一个可以同时处理它们的单个类。
标签: c# inheritance interface subclass