2010-05-28 63 views
2
public interface IMyInterface 
{ 
    int A { get; set; } 
    string S { get; set; } 
} 

public abstract class MyAbs : IMyInterface 
{ } 

public class ConcreteClass : MyAbs 
{ 
    /* Implementation of IMyInterface*/ 
} 

是否可以在上面的抽象类中省略空实现? 如果是这样,怎么样?为什么?如何在实现接口时避免抽象类中的空实现?

+1

将代码放在代码段 – 2010-05-28 11:13:47

+0

如果您的抽象类将完全没有实现,那为什么要这样做呢?为什么不使用界面?抽象类通常用于您提供部分实现的情况。 – 2010-05-28 11:15:33

回答

2

你可以在抽象类中定义的方法/属性为抽象的,所以它不会有空实现

您提供的代码不会编译

你需要的是

public interface IMyInterface 
    { 
     int A 
     { get; set; } 
     string S 
     { get; set; } 
    } 
    public abstract class MyAbs : IMyInterface 
    { 
     public abstract int A { get; set; } 
     public abstract string S { get; set; } 
    } 
    public class ConcreteClass : MyAbs 
    { 
     /* Implementation of IMyInterface*/ 
    } 
+0

http://stackoverflow.com/questions/197893/why-an-abstract-class-implementing-an-interface-can-miss-the-declaration-implemen 请参考此链接 – user320199 2010-05-28 11:17:51

+0

Java允许抽象类省略接口方法减速,但c#没有。 – 2010-05-28 11:30:07

0

抽象类的目的是封装适用于所有派生类的一些常见行为。如果你的抽象类没有任何东西,那么它没有任何目的,ConcreteClass应该直接实现接口。

如果随后添加另一个也实现此行为的类,那么如果有意义的话,那就是重构和创建抽象基类的时间。

+0

http://stackoverflow.com/questions/197893/why-an-abstract-class-implementing-an-interface-can-miss-the-declaration-implemen 请看看这个链接 – user320199 2010-05-28 11:19:27

+1

a)这就是Java而不是C#,在C#中你必须声明方法为抽象的, b)它不会改变这样一个事实,即完全抽象类在这种情况下不是有用的东西 – Paolo 2010-05-28 11:23:30

+0

我们不能在C#中做同样的事吗? – user320199 2010-05-28 11:25:30