일관성없는 접근성 : 매개 변수 유형이 방법보다 접근성이 떨어짐


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

나는 문제가 무엇인지 실제로 이해하지 못합니다. 두 필드는 모두 비공개이며 양식의 관련 공개 방법으로 액세스 할 수 있습니다. 인터넷 검색은 하나의 요소가 공개 요소이고 다른 하나는 비공개 요소를 가리 키기 때문에 실제로 도움이되지 않습니다.

도와 줄 사람 있어요?

답변:


352

public클래스의 생성자 clientspublic있지만 유형의 매개 변수 ACTInterface가 있습니다 private(클래스에 중첩되어 있습니까?). 당신은 그렇게 할 수 없습니다. ACTInterface최소한으로 액세스 할 수 있어야합니다 clients.


2
자세한 내용은 오류 CS0051
Alexei Levenkov

5
이것은 나를 도왔다. 다음을 수행하려고했습니다. JsonConvert.DeserializeObject <List <Name_Of_My_Model >> (response.Content.ReadAsStringAsync (). Result); "Name_Of_My_Model"클래스가 공용 또는 개인용으로 설정되지 않았습니다. "Name_Of_My_Model"(클래스)을 public으로 설정하여 WebMethod 데코레이터가있는 ajax 호출에 대해 "public"메서드에 사용되도록 설정해야합니다.
Eric Milliot-Martinez


1
그리고 @ EricMilliot-Martinez, 귀하의 의견이 저에게 도움이되었습니다. 수업 중 하나에 Public을 추가해야했습니다. 감사.
Fütemire

81

수업을 공개하십시오.

class NewClass
{

}

와 같다:

internal class NewClass
{

}

수업은 공개되어야합니다


27

type과 같은 소리 ACTInterface는 아니지만 (최상위 레벨 인 경우) 또는 (다른 유형으로 중첩 된 경우 ) public기본 접근성을 사용중인 경우.internalprivate

public수정 자 유형을 지정하면 수정자가 수정됩니다.

또 다른 접근법은 유형과 메소드를 모두 internal의도하는 경우 만드는 것입니다.

문제는 필드 의 접근성 ( oActInterface)이 아니라 유형 ACTInterface자체 의 접근성입니다 .


9

유형의 접근성은 무엇입니까 support.ACTInterface. 오류는 공개되지 않았다는 것을 나타냅니다.

서명의 일부 매개 변수 유형이 공용이 아닌 공용 메소드 서명을 노출 할 수 없습니다. 호출자가 필요한 매개 변수를 구성 할 수 없으므로 외부에서 메소드를 호출 할 수 없습니다.

당신이 할 경우 support.ACTInterface대중이이 오류를 제거합니다. 또는 가능한 경우 양식 방법의 액세스 가능성을 줄이십시오.


4

문제는 변수가 아니라 ACTInterface 선언과 관련이있는 것 같습니다. ACTInterface가 우연히 내부로 선언 되었습니까?


2

이 오류가 발생했을 때 "helper"클래스를 사용하는 클래스 내에서이 문제를 일으킨 public으로 선언하지 않은 "helper"클래스가있었습니다. "helper"클래스를 공개하면 다음과 같이이 오류가 해결되었습니다.

공공 서비스 클래스 {공공 서비스 클래스 (HelperClass _helper) {}}

public class HelperClass {} // 내 문제를 해결 한 public HelperClass에 주목하십시오.

이것은 이것을 만나는 다른 사람을 도울 수 있습니다.


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

오류는 'support.ACTInterface'에 액세스 할 수 없음을 나타냅니다. 인터페이스를 개인용으로 만들거나 최소한 내부 용으로 만들거나 공용으로 설정했기 때문입니다.


1

Parameter (액세서 ​​빌 러티가 적은 클래스)를 얻은 object다음 as키워드로 클래스로 변환 할 수 있습니다 .


당신은 생각하지 않습니까? 이것을 주석으로 추가 할 수 있습니다.
surajs1n

0

classvariable을 새 형식으로 사용하려고 할 때이 오류가 발생하면 클래스 정의를

Formname.Designer.cs

Formname.cs 파일 대신.


0

엔티티 프레임 워크 모델을 업데이트 한 후이 오류가 솔루션의 여러 파일을 감염시키는 것을 발견했습니다. 내 .edmx 파일과 TT 파일을 마우스 오른쪽 버튼으로 클릭하고 "사용자 지정 도구 실행"을 클릭하면 Visual Studio 2012를 다시 시작한 직후에 다시 표시됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.