【问题标题】:Use the abstract class of one project in another c#在另一个c#中使用一个项目的抽象类
【发布时间】:2017-07-20 05:49:49
【问题描述】:

我有两个项目项目 A 和项目 B。在项目 B 中有一个类 TC,它是一个抽象类,在该类中有一个抽象方法 CanSave()。 我在项目 B 中添加了项目 A 的引用。 在项目B中,我想使用抽象方法CanSave作为项目A的覆盖。所以一种方法是简单地将项目A的类添加为项目B的父类,然后将其用作覆盖方法。但问题是那里已经是项目B的类继承的类。所以我不能使用它,因为不能使用多个基类。 什么是解决方案,以便我可以在项目 B 中使用抽象类

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 你可以在Project B中创建另一个继承TC的类(比如说TTC),然后在OP类中创建一个TTC对象

标签: c# oop inheritance


【解决方案1】:

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

【讨论】:

  • 是的,问题在于它包含其他具有实现的非抽象方法。
  • 是的,好的,但是您可以将方法CanSave() 封装在接口中(并将其从您的类中删除)。然后所有使用此方法的类都必须实现该接口,但是您可以将此接口添加到您的新项目中,并且您可以从它与其他类一起继承。
【解决方案2】:

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

public interface ITC
{
    bool CanSave(object parameter);
}

public class OP: CM, ITC
{
    public bool CanSave(object parameter) 
    {
        ...
    }
}

【讨论】:

  • 我无法将其转换为接口,因为该类中实现了其他不同的非抽象方法。我无法将其转换为接口,因为在接口中将没有实现。
  • 派生类中需要TC的所有非抽象方法吗?
  • 是的,我无法更改 TC 的实现,因为许多其他类也在使用 TC 类及其方法。因此,更改 TC 中的某些内容可能会影响其他也在使用 TC 的类。
【解决方案3】:

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

【讨论】:

  • :有很多其他类使用相同的抽象方法 CanSave,所以我无法更改该功能。
  • @Ritesh 您只能在 CanSave 方法中进行更改。对使用它的类完全没有影响
【解决方案4】:

您可以在项目 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2011-04-03
    • 2016-09-06
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多