可访问性不一致:参数类型的可访问性不如方法

我试图在两个表单之间传递一个对象(基本上是对当前登录用户的引用)。目前,我在登录表单中有一些东西:

private ACTInterface oActInterface;


public void button1_Click(object sender, EventArgs e)
{
oActInterface = new ACTInterface(@"\\actserver\Database\Premier.pad",this.textUser.Text,this.textPass.Text);


if (oActInterface.checkLoggedIn())
{
//user has authed against ACT, so we can carry on
clients oClientForm = new clients(oActInterface);
this.Hide();
oClientForm.Show();
}
else...

在下一个表格(客户)上,我有:

public partial class clients : Form
{
private ACTInterface oActInt {get; set;}


public clients(ACTInterface _oActInt)

...这导致我得到:

Error   1   Inconsistent accessibility:
parameter type 'support.ACTInterface' is less accessible than method
'support.clients.clients(support.ACTInterface)'
c:\work\net\backup\support\support\clients.cs   20  16  support

我真的不明白问题是什么-这两个字段都是私有的,并且由相关的公共方法从表单访问。谷歌搜索并没有真正的帮助,因为它只是指出一个元素是公共的,另一个是私有的,这不是这里的情况。

有人帮助吗?

537271 次浏览

publicclients的构造函数是public,但它有一个类型为ACTInterface的形参,即private(它嵌套在类中?)你不能这么做。你需要让ACTInterface至少像clients一样可访问。

support.ACTInterface类型的可访问性是什么?这个错误表明它不是公开的。

如果签名的某些参数类型不是公共的,则不能公开公共方法签名。不可能从外部调用该方法,因为调用者无法构造所需的参数。

如果将support.ACTInterface设为公共,则会删除此错误。或者,如果可能的话,减少表单方法的可访问性。

If听起来像是ACTInterface类型不是public,而是使用默认的可访问性internal(如果它是顶级的)或private(如果它嵌套在另一种类型中)。

给该类型public修饰符可以修复它。

另一种方法是使类型和方法都internal,如果这是你的意图。

问题不在于 (oActInterface)的可访问性,而在于ACTInterface类型本身。

问题似乎不在于变量,而在于ACTInterface的声明。ACTInterface是否声明为内部?

将类设为public。

class NewClass
{


}

等于:

internal class NewClass
{


}

所以这个类必须是公共的

类型的类定义中,如果要在新表单中使用类变量时发生此错误

Formname.Designer.cs

而不是Formname.cs文件。

在更新实体框架模型后,我发现这个错误感染了解决方案中的几个文件。我简单地右键单击我的。edmx文件和我的TT文件,然后单击“运行自定义工具”,这让我在重新启动Visual Studio 2012后再次正确。

试着让你的构造函数像这样私有:

private Foo newClass = new Foo();

当我收到这个错误时,我有一个“helper”类,我没有声明为公共,在使用“helper”类的类内部导致了这个问题。使“helper”类公共解决了这个错误,如下所示:

公共运行ServiceClass < p > { public ServiceClass(helper类_helper) {} } < / p >

公共类HelperClass{} //注意解决我的问题的公共HelperClass。

这可能会帮助其他遇到这种情况的人。

你可以获取Parameter(可访问性较低的类)为object,然后通过as关键字将其转换为你的类。

parameter type 'support.ACTInterface' is less accessible than method
'support.clients.clients(support.ACTInterface)'

错误显示“支持”。ACTInterface'的可访问性较差,因为你已经将接口设置为私有,至少将其设置为内部或公共。

所有将ActInterface类型设为public的答案都是正确的。我写这篇文章只是为了明确地说明为什么这是一个问题

如果公共类构造函数的形参是私人内部限定类,这意味着您不能从程序集外部创建该形参类的对象,并且当您无法实例化形参对象时,如何调用此构造函数来实例化该类的对象呢?

在我的情况下,我在一个文件中已经完成了类,我在另一个文件中传递该类的构造函数的实例。 问题是在声明类时没有使用公共修饰符:class MyClass {}

我可以通过将它改为public class MyClass {}来解决它