强制抽象实施给孩子的孩子

时间:2011-07-18 14:16:17

标签: c# inheritance abstract-class

我想要这样的东西

    public abstract class abc
    {
        public abstract void test();
    }

    public class def : abc
    {
            // ignore test(), this is concrete class which can be initialized
            // test method is not needed for this class
    }

    public class ghi : def
    {
        public override void test()
        {
            // force test method implementation here
        }
    }

有哪些方法可以做到这一点。我想忽略在GHI类中使用接口,因为这些不在我们的应用程序中。

修改

大家都是对的,但我需要类似的实施。点是我有各种具有共同功能的对象,所以我从一个类继承。我想把这个类交给其他必须实现测试方法的人。

6 个答案:

答案 0 :(得分:2)

这是不可能的。 def必须实施test,除非它也是抽象的。

答案 1 :(得分:1)

以粗体编辑。 摘要意味着你必须在你的子类中实现它。 如果要强制执行并非每个“继承者”都具有的功能,则应使用接口。我会这样做:

public abstract class abc
{
    // Everything you want here, but not "Test()".
}

public class def : abc
{
}

public class ghi : def, ITestable
{
    public void ITestable.Test()
    {
    }
}

public interface ITestable
{
    void Test();
}

答案 2 :(得分:0)

你不可能做什么。你不能在基类(abc)中添加一个抽象方法,它不需要在从类继承的类(def)中实现,或者它也必须是抽象的

答案 3 :(得分:0)

没有办法。这是一个定义问题,你说“我希望每个继承自这个类的类都有这个方法”,然后尝试创建一个没有它的孩子。

答案 4 :(得分:0)

您可以将基类中的Test方法设置为Virtual,并将方法体留空。因此,您可以在任何地方覆盖它。这更像是一个黑客攻击,使用界面是一个更好的方法。

public abstract class abc
{
    public virtual void test()
    {
    }
}

public class def : abc
{
        // ignore test(), this is concrete class which can be initialized
        // test method is not needed for this class
}

public class ghi : def
{
    public override void test()
    {
        // force test method implementation here
    }
}

你可以有另一个抽象类

public abstract class abc
{
}

public abstract class lmn : abc
{
 public abstract void Test();
}
public class def : abc
{
    // ignore test(), this is concrete class which can be initialized
    // test method is not needed for this class
}

public class ghi : lmn
{
 public override void test()
 {
    // force test method implementation here
 }

} 注意 - 此抽象完全取决于您的域名。这个建议只是一种技术方法。不确定它是否与手头的问题域保持一致。

答案 5 :(得分:0)

您需要将def类设为抽象类。