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();
}
我犯了其他错误?
答案 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是内部的。如果您更改了代码,它将起作用!