C# 在另一个c中使用一个项目的抽象类#

C# 在另一个c中使用一个项目的抽象类#,c#,oop,inheritance,C#,Oop,Inheritance,我有两个项目Project A和Project B。在Project B中有一个类TC,它是一个抽象类,在该类中有一个抽象方法CanSave()。 我在项目B中添加了项目A的参考。 在项目B中,我想使用抽象方法CanSave as override of project A。因此,一种方法就是简单地将项目A的类添加为项目B的父类,然后将其用作override方法。但问题是,项目B的类已经继承了一个类。因此我无法使用它,因为无法使用多个基类。 为了在项目B中使用抽象类,解决方案是什么 片段 项目A

我有两个项目Project A和Project B。在Project B中有一个类TC,它是一个抽象类,在该类中有一个抽象方法CanSave()。 我在项目B中添加了项目A的参考。 在项目B中,我想使用抽象方法CanSave as override of project A。因此,一种方法就是简单地将项目A的类添加为项目B的父类,然后将其用作override方法。但问题是,项目B的类已经继承了一个类。因此我无法使用它,因为无法使用多个基类。 为了在项目B中使用抽象类,解决方案是什么

片段 项目A 公共抽象类TC { 受保护的抽象bool CanSave(对象参数); }

项目B 公共类OP:CM(已经有基类) { //想在这里使用CanSave吗 }


如果是抽象方法(没有实现),我建议声明接口。您可以从一个类继承,但可以从多个接口继承(无论您是否已经从类继承)。

如果它是抽象方法(没有实现),我建议声明接口。您可以从一个类继承,但可以从多个接口继承(独立于您是否已经从类继承)。

将抽象类TC转换为and接口,然后您可以在类OP中从它派生:

公共接口ITC
{
bool-CanSave(对象参数);
}
公共类OP:CM,ITC
{
公共bool CanSave(对象参数)
{
...
}
}

将抽象类TC转换为and接口,然后可以在OP类中从中派生:

公共接口ITC
{
bool-CanSave(对象参数);
}
公共类OP:CM,ITC
{
公共bool CanSave(对象参数)
{
...
}
}

最好将
方法逻辑提取为静态方法,并在两个项目中使用。否则,您必须将类的实例
TC
保存在
OP
实例中

最好将
CanSave
方法逻辑提取到静态方法中,并在两个项目中使用它。否则,您必须将类
TC
的实例保留在
OP
实例中,您可以在项目B中创建另一个继承TC的类(比如TTC)

public class TTC: TC
{
    ...
}
然后在OP类中创建一个TTC对象

public class OP:CM
{
    private TTC ttcobject;
    //you can inject it
    public OP(TTC _ttc){
        this.ttcobject = _ttc;
        // or just initialize it here
        // ttcobject = new TTC();
    }

    public bool CanSave(object parameter)
    {
        return ttc.CanSave(parameter;
    }
}

您可以在项目B中创建另一个继承TC的类(比如TTC)

public class TTC: TC
{
    ...
}
然后在OP类中创建一个TTC对象

public class OP:CM
{
    private TTC ttcobject;
    //you can inject it
    public OP(TTC _ttc){
        this.ttcobject = _ttc;
        // or just initialize it here
        // ttcobject = new TTC();
    }

    public bool CanSave(object parameter)
    {
        return ttc.CanSave(parameter;
    }
}

您可以在继承TC的项目B中创建另一个类(比如TTC),然后在OP类中创建TTC的对象您可以在继承TC的项目B中创建另一个类(比如TTC),然后在OP classI中创建TTC的对象。我无法将其转换为接口,因为类中实现了其他不同的非抽象方法。我无法将其转换为接口,因为在接口中没有实现。是否需要派生类中TC的所有非抽象方法?是,我无法更改TC的实现,因为太多其他类也在使用类TC及其方法。因此,更改TC中的某些内容可能会影响其他也在使用TC的类。我无法将其转换为接口,因为类中实现了其他不同的非抽象方法。我无法将其转换为接口,因为在接口中将没有实现。派生类中是否需要TC的所有非抽象方法?是的,我无法更改TC的实现,因为有太多其他类也在使用TC类及其方法。因此更改TC中的某些内容也会影响使用TC的其他类。是的,这就是它包含其他非抽象方法的问题可以,但您可以在接口中封装方法
CanSave()
(并将其从类中删除)。然后,所有使用此方法的类都必须实现该接口,但您可以将此接口添加到新项目中,并可以将其与其他类一起继承。是的,这就是问题所在,它包含其他具有实现的非抽象方法。是的,可以,但您可以封装方法
CanSave()
(并将其从类中删除)。然后所有使用此方法的类都必须实现该接口,但是,您可以将此接口添加到新项目中,并可以将其与其他类一起继承。注意:有太多其他类使用相同的抽象方法CanSave,因此我无法更改该功能。@Ritesh您只能在CanSave方法中进行更改。对使用它的类没有任何影响:有太多其他类使用相同的抽象方法CanSave,因此我无法更改该功能。@Ritesh您只需在CanSave方法内进行更改。对于使用它的类来说,没有任何影响