如何通过C#中的单个接口将多个基类连接到多个子类?

时间:2018-12-24 19:09:55

标签: c# inheritance interface subclass

我有三个类继承自一个较高的基类,我们将其称为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();
        } 
    }   

}

1 个答案:

答案 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();
}
相关问题