如何用界面解决这个错误?

时间:2014-10-23 17:10:21

标签: c#

Visual Studio给我这个错误,无法继续。 编译器报告IArea不太容易访问processingArea。我该怎么办?

如何在方法processingArea()中输入参数?

我进入一个实现IArea的对象,但是如何创建一个实现该接口的对象?

public class GeometricShapes
{
    double Area;
    double @base;
    double height;
    public GeometricShapes()
    {

    }

    public void processingArea(IArea poligono)
    {
        var area = poligono.CalculateArea();
        Console.WriteLine(area);
        Console.ReadLine();
    }
}

public class Quadrato : GeometricShapes, IArea
{
    double @base;
    double height;

    public double CalculateArea()
    {
        Random x = new Random();
        this.@base = x.Next(100);
        this.height = x.Next(100);

        var Area = @base * @base;
        return Area;
    }
}

public class Rettangolo : GeometricShapes, IArea
{
    double @base;
    double height;

    public double CalculateArea()
    {
        Random x = new Random();
        this.@base = x.Next(100);
        this.height = x.Next(100);

        var Area = @base * height;
        return Area;
    }
}

interface IArea
{            
    double CalculateArea();
}        

我犯了其他错误?

5 个答案:

答案 0 :(得分:1)

您实施IArea的课程是公开的。因此IArea应该是公开的。

public interface IArea
{
    double CalculateArea();
}

答案 1 :(得分:1)

该错误意味着您拥有public方法,该方法采用具有更严格的访问修饰符的参数(在本例中为IArea)。 internal是默认值,因此您的界面可能需要:

public interface IArea
{
  ...
}

当你考虑它时,错误是有道理的。如果您从另一个程序集调用公共方法,但无法查看参数类型(因为它的internal),您实际上无法调用该方法!编译器会为您检测到这一点,并抛出错误。

答案 2 :(得分:1)

通过不为接口IArea指定可见性修饰符,C#使用默认值" internal",因此它只对同一程序集中的其他类型可见。但是,您的形状是公共的,因此在编写时,可以从代码中的某个位置引用具体类,该位置不允许了解它继承的接口。这不是犹太人。

要解决此问题,只需将public关键字添加到定义中,即可将IArea更改为公共界面。

答案 3 :(得分:0)

为了使您的界面正常工作,您应确保将其标记为public。至于参数问题,您应该执行以下操作:

public interface IArea
{
     double CalculateArea(double length, double width);
}

现在,当您隐式地显式实现您声明为 public 并接受参数的界面时。

现在,当您构建对象时:

public static class Rectangle : IArea
{  
     public double CalculateArea(double length, double width)
     {
          // Logic to calculate.
     }
}

那将是一种实施。

我稍微修改了答案,所以在Main中你会这样做:

Rectangle rectangle = new Rectangle();
Console.WriteLine(rectangle.CalculateArea(10, 5));

这将构建您的对象,然后return区域应写入您的控制台。

答案 4 :(得分:0)

要解决您的错误,您应该写:public interface IArea {...}

实际上,public关键字用于类,但不用于接口,默认情况下是内部接口。或者,processingArea方法是公共的,其中IArea是内部的。如果您更改了代码,它将起作用!