繁体   English   中英

不一致的可访问性:参数类型比方法更难访问

[英]Inconsistent Accessibility: Parameter type is less accessible than method

我正在尝试在两个 forms 之间传递一个 object(基本上是对当前登录用户的引用)。目前,我在登录表单中有这些内容:

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

我真的不明白问题出在哪里——这两个字段都是私有的,可以通过表单中的相关公共方法访问。 谷歌搜索并没有真正的帮助,因为它只是指向一个元素是公共的而另一个元素是私有的,这里不是这种情况。

有人帮忙吗?

public class clients的构造函数是public的,但它有一个ACTInterface类型的参数是private的(它嵌套在 class 中?)。 你不能那样做。 您需要使ACTInterface至少与clients一样可访问。

公开 class。

class NewClass
{

}

是相同的:

internal class NewClass
{

}

所以 class 必须是公开的

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

为类型提供public修饰符将修复它。

如果这是您的意图,另一种方法是使类型和方法都成为internal

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

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

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

如果您将support.ACTInterface公开,这将消除此错误。 如果可能的话,或者减少表单方法的可访问性。

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

错误说“support.ACTInterface”不太容易访问,因为您已将接口设为私有,至少将其设为内部或公开。

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

当我收到此错误时,我有一个“助手”class,我没有将其声明为公共,这导致使用“助手”class 的 class 内部出现此问题。 将“助手” class 公开解决了此错误,如下所示:

公共服务类 { 公共服务类(HelperClass _helper){ } }

public class HelperClass {} // 注意解决了我的问题的公共 HelperClass。

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

您可以将参数(具有较少可访问性的类)作为object ,然后通过as关键字将其转换为您的 class。

在我的例子中,我在一个文件中有一个 class,我正在将那个 class 的一个实例传递给另一个文件中我的表单的构造函数。 问题是在没有 public 修饰符的情况下声明了 class: class MyClass {}

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

如果要在新形式中使用类变量时出现此错误,则应将 class 定义放在

表单名.Designer.cs

而不是 Formname.cs 文件。

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

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

If a parameter to your public class constructor is private or internal qualified class, it means you wont be able to create an object of that parameter class from outside of the assembly and when you cannot instantiate the parameter object, how can you call this constructor to实例化这个 class 的 object?

尝试像这样将您的构造函数设为私有:

private Foo newClass = new Foo();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM