我有三个类继承自一个较高的基类,我们将其称为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();
}
}
}
答案 0 :(得分:1)
为什么不将大写和小写字母都当作接口,而只是在接口上有一个可以在它们之间转换的方法。
public interface IUpperCaseLetter
{
ILowerCaseLetter ToLowerCase();
}
public interface ILowerCaseLetter
{
IUpperCaseLetter ToUpperCase();
}
public class UpperA : IUpperCaseLetter
{
public ILowerCaseLetter ToLowerCase()
{
return new LowerA();
}
}
public class LowerA : ILowerCaseLetter
{
public IUpperCaseLetter ToUpperCase()
{
return new UpperA();
}
}
foreach (var upperLetter in setOfImaginaryBuiltLetterObjects)
{
var lowerLetter = upperLetter.ToLowerCase();
}
接口也可以继承其他接口,因此,如果您在大写和小写之间共享某些内容,请创建一个共享接口
public interface ILetter
{
bool Italic{ get; }
}
public interface IUpperCaseLetter : ILetter
{
ILowerCaseLetter ToLowerCase();
}
public interface ILowerCaseLetter : ILetter
{
IUpperCaseLetter ToUpperCase();
}