असंगत अभिगम्यता: पैरामीटर प्रकार विधि की तुलना में कम सुलभ है


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

मुझे वास्तव में समझ नहीं आया कि समस्या क्या है - दोनों फ़ील्ड निजी हैं, और प्रपत्र से संबंधित सार्वजनिक विधि द्वारा एक्सेस किया गया है। Googling वास्तव में मदद नहीं करता है, क्योंकि यह सिर्फ एक तत्व के सार्वजनिक होने और दूसरे निजी होने की ओर इशारा करता है, जो यहां नहीं है।

कोई मदद करे?

जवाबों:


352

के निर्माता publicवर्ग clientsहै public, लेकिन यह प्रकार का एक पैरामीटर है ACTInterfaceकि है private(यह एक वर्ग में नीडिंत है?)। आप ऐसा नहीं कर सकते। आपको ACTInterfaceकम से कम के रूप में सुलभ बनाने की जरूरत है clients


2
अधिक जानकारी के लिए त्रुटि पर CSDN51
अलेक्सई

5
इससे मुझे मदद मिली। मैं निम्नलिखित करने की कोशिश कर रहा था: JsonConvert.DeserializeObject <List <Name_Of_My_Model >> (response.Content.ReadAsStringAsync ()। परिणाम); "Name_Of_My_Model" वर्ग सार्वजनिक या निजी के लिए सेट नहीं किया गया था। सार्वजनिक रूप से "Name_Of_My_Model" (वर्ग) को "सार्वजनिक" पद्धति में उपयोग करने के लिए सेट करने की आवश्यकता है, जिसे मैंने इसके लिए एक WebMethod डेकोरेटर बनाया था, जो कि anjax कॉल के लिए कर रहा था।
एरिक मिलियट-मार्टिनेज


1
और @ EricMilliot-Martinez, आपकी टिप्पणी ने मेरी मदद की। मुझे अपनी एक कक्षा के साथ पब्लिक को भी जोड़ना था। धन्यवाद।
फ्युटेमेयर

81

वर्ग को सार्वजनिक करें।

class NewClass
{

}

के समान है:

internal class NewClass
{

}

इसलिए वर्ग को सार्वजनिक होना होगा


27

यदि ऐसा लगता है कि प्रकार ACTInterfaceनहीं है public, लेकिन या तो डिफ़ॉल्ट पहुँच क्षमता का उपयोग कर रहा है internal(यदि यह शीर्ष स्तर है) या private(यदि यह किसी अन्य प्रकार में नेस्टेड है)।

प्रकार देने से publicसंशोधक इसे ठीक कर देगा।

एक और तरीका यह है internalकि अगर आपका इरादा है, तो दोनों प्रकार और विधि बनाने के लिए ।

मुद्दा क्षेत्र की पहुंच ( oActInterface) नहीं है, बल्कि ACTInterfaceस्वयं प्रकार का है।


9

प्रकार की पहुंच क्या है support.ACTInterface। त्रुटि बताती है कि यह सार्वजनिक नहीं है।

आप एक सार्वजनिक विधि हस्ताक्षर को उजागर नहीं कर सकते हैं जहाँ हस्ताक्षर के कुछ पैरामीटर प्रकार सार्वजनिक नहीं हैं। यह बाहर से विधि को कॉल करना संभव नहीं होगा क्योंकि कॉलर आवश्यक पैरामीटर का निर्माण नहीं कर सकता है।

यदि आप support.ACTInterfaceसार्वजनिक करते हैं जो इस त्रुटि को दूर करेगा। यदि संभव हो तो प्रपत्र विधि की पहुँच को वैकल्पिक रूप से कम करें।


4

समस्या चर के साथ नहीं बल्कि ACTInterface की घोषणा के साथ प्रतीत होती है। क्या ACTInterface को किसी भी संयोग से आंतरिक घोषित किया गया है?


2

जब मुझे यह त्रुटि मिली, तो मेरे पास एक "सहायक" वर्ग था जिसे मैंने सार्वजनिक रूप से घोषित नहीं किया था कि इस समस्या का कारण उस वर्ग के अंदर था जिसने "सहायक" वर्ग का उपयोग किया था। "सहायक" वर्ग को सार्वजनिक करते हुए इस त्रुटि को हल किया, जैसे:

Public ServiceClass {सार्वजनिक ServiceClass (हेल्परक्लास _helper) {}}

सार्वजनिक वर्ग हेल्परक्लास {} // सार्वजनिक हेल्परक्लास पर ध्यान दें जिसने मेरा मुद्दा हल किया।

इससे किसी और का सामना करने में मदद मिल सकती है।


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

त्रुटि का कहना है कि 'support.ACTInterface' कम सुलभ है क्योंकि आपने इंटरफ़ेस को निजी बना दिया है, कम से कम इसे आंतरिक या सार्वजनिक करें।


1

आप पैरामीटर (वर्ग जिसकी पहुंच कम है) प्राप्त कर सकते हैं और objectफिर उसे asकीवर्ड द्वारा अपनी कक्षा में परिवर्तित कर सकते हैं।


क्या आपको नहीं लगता? आप इसे टिप्पणी के रूप में जोड़ सकते हैं।
surajs1n

0

यदि यह त्रुटि तब होती है जब आप एक नए रूप में एक कक्षावार उपयोग करना चाहते हैं, तो आपको कक्षा की परिभाषा को अंदर रखना चाहिए

Formname.Designer.cs

Formname.cs फ़ाइल के बजाय।


0

अपने एंटिटी फ्रेमवर्क मॉडल को अपडेट करने के बाद, मुझे अपने समाधान में कई फाइलों को संक्रमित करने में यह त्रुटि मिली। मैंने बस अपनी .edmx फ़ाइल और अपनी TT फ़ाइल पर राइट क्लिक किया और "रन कस्टम टूल" पर क्लिक किया और विजुअल स्टूडियो 2012 के पुनः आरंभ के बाद मेरे पास फिर से सही था।


-3

अपने कंस्ट्रक्टर को इस तरह निजी बनाने का प्रयास करें:

private Foo newClass = new Foo();

ज़रुरी नहीं। यह नेस्टेड प्रोटेक्शन के कारण है।
जबरदस्ती
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.