如何使用接口解决此错误
本文关键字:错误 解决 接口 何使用 | 更新日期: 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是内部的。如果你这样修改你的代码,它就会起作用!