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


227

我正在尝试在两种形式之间传递一个对象(基本上是对当前登录用户的引用)。目前,我在登录表单中有以下几行内容:

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

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

有人帮忙吗?

Answers:


352

public类的构造方法clients是,public但它的参数类型ACTInterfaceprivate(嵌套在类中?)。你不能那样做。您需要使ACTInterface访问权限至少与一样clients


2
有关更多信息,请参见
Alexei Levenkov 2014年

5
这对我有帮助。我正在尝试执行以下操作:JsonConvert.DeserializeObject <List <Name_Of_My_Model >>(response.Content.ReadAsStringAsync()。Result); 未将“ Name_Of_My_Model”类设置为Public或Private。原来,我需要将“ Name_Of_My_Model”(类)设置为public,以便在“ public”方法中使用,该方法上面有一个WebMethod装饰器用于我正在进行的ajax调用。
Eric Milliot-Martinez


1
@ EricMilliot-Martinez,您的评论对我有所帮助。我还需要将Public添加到我的一个课程中。谢谢。
Fütemire

81

公开授课。

class NewClass
{

}

是相同的:

internal class NewClass
{

}

所以上课必须是公开的


27

如果喜欢的类型的声音ACTInterface是不是public,但使用的无论是默认可访问internal(如果是顶级)或者private(如果它嵌套在另一个类型)。

赋予类型public修饰符将对其进行修复。

另一种方法是同时创建类型和方法internal,如果这是您的意图。

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


9

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

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

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


4

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


2

收到此错误时,我有一个没有被公开的“帮助程序”类,该类在使用“帮助程序”类的类中引起了此问题。使“ helper”类公开可以解决此错误,如下所示:

公共ServiceClass {公共ServiceClass(HelperClass _helper){}}

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

这可能会帮助遇到此问题的其他人。


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

该错误提示“ support.ACTInterface”较难访问,因为您已将该接口设为私有,至少是将其设置为内部或公开。



0

如果您想以新形式使用类变量时发生此错误,则应将类定义放在

Formname.Designer.cs

而不是Formname.cs文件。


0

更新我的实体框架模型后,我发现此错误感染了我的解决方案中的多个文件。我只需右键单击我的.edmx文件和TT文件,然后单击“运行自定义工具”,即可在重新启动Visual Studio 2012之后再次显示我的信息。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.