我想要这样的东西
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类中使用接口,因为这些不在我们的应用程序中。
修改
大家都是对的,但我需要类似的实施。点是我有各种具有共同功能的对象,所以我从一个类继承。我想把这个类交给其他必须实现测试方法的人。
答案 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类设为抽象类。