编译此 C# 代码时,我的 Visual Studio 2010 发现参数类型错误的可访问性不一致:
class Program
{
class BaseClass
{
public class NestedClass
{
}
}
public static bool Function1(BaseClass.NestedClass obj)
{
return true;
}
static void Main(string[] args)
{
Function1(new BaseClass.NestedClass());
new BaseClass.NestedClass();
Console.ReadLine();
}
}
class Program
{
class BaseClass
{
public class NestedClass
{
}
}
//public static bool Function1(BaseClass.NestedClass obj)
//{
// return true;
//}
static void Main(string[] args)
{
//Function1(new BaseClass.NestedClass());
new BaseClass.NestedClass();
Console.ReadLine();
}
}
class BaseClass
{
public class NestedClass
{
}
}
public class OtherClass
{
public void Function1(BaseClass.NestedClass param)
{
var newObj = new BaseClass.NestedClass();
}
}
最佳答案
顶级类型默认为内部类型,但嵌套类型默认为私有(private)。因此,您获得了一个内部类型,该类型具有一个公共(public)方法,该方法具有一个私有(private)类型作为参数。使所有访问修饰符显式:
internal class Program
{
private class BaseClass
{
public class NestedClass {}
}
public static bool Function1(BaseClass.NestedClass obj)
{
return true;
}
private static void Main(string[] args)
{
Function1(new BaseClass.NestedClass());
new BaseClass.NestedClass();
Console.ReadLine();
}
}
Function1
但不理解它 - 因此不一致的可访问性错误。BaseClass
来解决此问题。内部或公共(public)或通过制作 Function1
私有(private)的。请注意 BaseClass
不必仅仅因为 Function1
就公开是公开的,因为 Program
的可访问域只是包含它的程序集。这使得 Function1
的可访问域相同。有关更多详细信息,请参阅 C# 规范的第 3.5.2 节。https://stackoverflow.com/questions/19442436/