虚类实现接口是否必须实现接口方法?

forDream_ 2015-05-17 06:04:41
定义接口如下:

interface IInterface
{
bool method();
}

定义虚类如下:

abstract class ClassTest: IInterface
{
abstract bool IInterface.method() //这里是语法错误的,不允许使用abstract关键字
{
throw new NotImplementedException();
}
}


请教一下,是不是这个继承接口的虚类ClassTest,必须要实现接口定义的方法?
因为我这个继承这个接口的虚类有多个,但是其偏向的业务不同 因此无法将方法抽象到接口中,我希望通过抽象类将该类自己的一些公共业务定义在抽象类里,然后再由具体实现类来实现接口定义的方法以及抽象类中定义的虚方法。
...全文
246 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
interface IInterface
    {
        bool method();
    }
    abstract class ClassTest : IInterface
    {
        public abstract bool method();
    }
这样才不会报错,你那个是显示声明,必须要有实现
forDream_ 2015-05-17
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
c# 的语法是这样的
abstract class ClassTest : IInterface
{
    abstract public bool method();
}
你的那种写法,编译器应该明确告诉你了,不是什么“不允许abstract关键字”,而是“声明为abstract的方法不应该有方法体”。
引用 7 楼 starfd 的回复:
public abstract bool IInterface.method();
不是必须要执行,这样声明为abstract 就行了
语法不允许的,抽象类中申明的方法,不接受abstract关键字修饰。 对于这样的代码: public abstract bool IInterface.method(); 编译器同样不通过,不接受public,去掉public修饰,则说不接受abstract修饰 我理解就是他要求我必须在抽象类中实现接口定义的方法。
  • 打赏
  • 举报
回复
声明为abstract 时,子类必须要实现此方法,不存在你所谓的忘记,因为编译器不会让编译通过
  • 打赏
  • 举报
回复
public abstract bool IInterface.method();
不是必须要执行,这样声明为abstract 就行了
  • 打赏
  • 举报
回复
c# 的语法是这样的
abstract class ClassTest : IInterface
{
    abstract public bool method();
}
你的那种写法,编译器应该明确告诉你了,不是什么“不允许abstract关键字”,而是“声明为abstract的方法不应该有方法体”。
forDream_ 2015-05-17
  • 打赏
  • 举报
回复
引用 4 楼 lovelj2012 的回复:
[quote=引用 3 楼 gam2046 的回复:] [quote=引用 2 楼 lovelj2012 的回复:] 抽象类实现接口,把接口中的方法映射到抽象类中作为抽象方法而不必实现,在抽象类中的继承类中实现接口中的方法即可。
“映射”是什么含义,因为在抽象类中 不实现接口方法编译不通过(而我是希望由抽象类的继承类去实现接口的方法),而且在抽象类中实现接口方法不允许使用abstract 关键字,即必须要实现接口方法。[/quote] 看不懂你表达的意思 抽象类实现接口,接口不必提供实现。


    abstract class ClassTest: IInterface
    {
        public bool method()         
        {
        }
    }
[/quote] ...接口本来就不能实现的。我的意思,如果抽象类实现了接口方法,那么抽象类的继承类 编译器就不会要求他实现接口方法。(此时只能人为的要求继承类去override,而不是语法意义上的要求,但是当工程量大的时候,可能会出现人忘记override了)而我希望由抽象类的继承类来实现接口方法,因为接口方法并不适合由这个抽象类实现。 由于接口没有“实现”部分,因此,我希望是由接口定义一套规范,组件之间的协同调用都是通过接口规定的。然后由一层抽象类实现接口,将一部分公共的业务逻辑写在抽象类中(因为接口没有“实现”),最后由继承类作出具体的业务逻辑。这样在组装过程中,我不必要关心具体的类,通过工厂模式等方法,在日后的重构中比较方便。
江南小鱼 2015-05-17
  • 打赏
  • 举报
回复
引用 3 楼 gam2046 的回复:
[quote=引用 2 楼 lovelj2012 的回复:] 抽象类实现接口,把接口中的方法映射到抽象类中作为抽象方法而不必实现,在抽象类中的继承类中实现接口中的方法即可。
“映射”是什么含义,因为在抽象类中 不实现接口方法编译不通过(而我是希望由抽象类的继承类去实现接口的方法),而且在抽象类中实现接口方法不允许使用abstract 关键字,即必须要实现接口方法。[/quote] 看不懂你表达的意思 抽象类实现接口,接口不必提供实现。


    abstract class ClassTest: IInterface
    {
        public bool method()         
        {
        }
    }
forDream_ 2015-05-17
  • 打赏
  • 举报
回复
引用 2 楼 lovelj2012 的回复:
抽象类实现接口,把接口中的方法映射到抽象类中作为抽象方法而不必实现,在抽象类中的继承类中实现接口中的方法即可。
“映射”是什么含义,因为在抽象类中 不实现接口方法编译不通过(而我是希望由抽象类的继承类去实现接口的方法),而且在抽象类中实现接口方法不允许使用abstract 关键字,即必须要实现接口方法。
江南小鱼 2015-05-17
  • 打赏
  • 举报
回复
抽象类实现接口,把接口中的方法映射到抽象类中作为抽象方法而不必实现,在抽象类中的继承类中实现接口中的方法即可。
江南小鱼 2015-05-17
  • 打赏
  • 举报
回复
抽象类实现接口

    abstract class ClassTest: IInterface
    {
        public bool method()         
        {
            throw new NotImplementedException();
        }
    }


110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧