如何使用接口解决此错误

本文关键字:错误 解决 接口 何使用 | 更新日期: 2023-09-27 18:27:32

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();
}        

我犯了其他错误?

如何使用接口解决此错误

实现IArea的类是公共的。因此IArea应该是公共的。

public interface IArea
{
    double CalculateArea();
}

这个错误意味着您有一个public方法,它接受一个具有更严格访问修饰符的参数(在本例中为IArea)。internal是默认的,所以您的界面可能需要是:

public interface IArea
{
  ...
}

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

由于没有为接口IArea指定可见性修饰符,C#使用默认的"internal",因此它只对同一程序集中的其他类型可见。然而,您的形状是公共的,因此在编写时,可以从代码中不允许知道其继承接口的位置引用具体类。这不是犹太洁食。

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

为了使接口正确工作,您应该确保它被标记为public。对于参数问题,您应该执行以下操作:

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

现在,当隐式显式ublic并接受参数。

现在,当你构建你的对象时:

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应该是要写入控制台的区域。

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

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