是否可以在派生类的接口中使用C#中的这个接口?

时间:2014-05-22 11:29:42

标签: c# class methods interface

我们有一个初始化了四个方法的接口。

interface A
{
    double S(double R);
    double L(double R); 
    double V(double R,double h);
    double W(double R,double h);   
}

是否可以在其派生类中仅实现某些方法?

class Ball:A
{
  public double S(double R)
    {
        return Math.PI * R * R * R;
    }
    public double L(double R)
    {
         return 2*Math.PI * R ;
    }

}

7 个答案:

答案 0 :(得分:1)

当您必须在对象(类)上强制执行某些属性时,将使用接口。

比如说:我们有一个汽车类,一个摩托车类和一个卡车类。这三个类中的每一个都应该有一个StartEngine()动作。 "引擎如何启动"每个车辆都留给每个特定的类,但它们必须具有StartEngine动作的事实是接口的域。因此,它使得接口的每个方法的实现是强制性的。

因此,我们可以在界面中对一些功能列表进行分组,并且每当类实现接口时,它都需要履行合同。 因此,我们不能只实现界面的某些功能。实际上,它们只是为了确保函数(在接口中)在继承类中实现。

我们可以分割下面的功能:

 interface B
    {
        double S(double R);
        double L(double R); 
    }

 interface A: B
    {
       double V(double R,double h);
       double W(double R,double h);   
    }

答案 1 :(得分:0)

不,虽然你可以声明一个实现这些方法的虚拟版本的基类。

然而,这似乎是糟糕的设计。

如果一个球没有V或W操作,那么也许你不应该把所有这些方法都放在同一个界面上。

答案 2 :(得分:0)

不,这是不可能的。你必须实现它们至少作为空方法什么都不做或者抛出异常的方法。

虽然接口是确保实现它的类至少具有接口中定义的完整方法集的特性,但是这可能不适合使用接口来实现这种功能。

答案 3 :(得分:0)

不可能

如官方网站http://msdn.microsoft.com/en-in/library/orm-9780596521066-01-13.aspx

所述
  

界面是合约。当你设计一个界面时,你就是   说,"如果您想提供此功能,必须实施   这些方法,提供这些属性和索引器,并提供支持   这些事件。"接口的实现者同意合同   并实现所需的元素。

  

当您定义实现接口的类时,您必须这样做   实现该接口的所有必需成员。

如果您只想采用2种方法,请提及我的建议。我建议再采用一种方法,因为无论您认为什么都不可能。

答案 4 :(得分:0)

遵循SOLID设计原则,尤其是接口隔离,会导致您的界面被拆分为多个界面。正如已经回答的那样,你在.NET中提出的问题是不可能的。更多有关实体here

的信息

另一个选择是只使用所需方法的接口A,然后从A派生接口B.然后Ball类将实现接口A.

答案 5 :(得分:0)

  

是否有可能,在他的派生类中只使用一些方法?

不可能。

而不是interface尝试使用任何选项

  1. Abstract class
  2. NotImplementedException了解派生类
  3. 上未使用的方法

答案 6 :(得分:-2)

您可以使用显式实现:

class Ball : A
{
    public double S(double R)
    {
        return Math.PI * R * R * R;
    }
    public double L(double R)
    {
        return 2 * Math.PI * R;
    }

    double A.V(double R, double h)
    {
        throw new NotImplementedException();
    }

    double A.W(double R, double h)
    {
        throw new NotImplementedException();
    }
}

MSDN Link