বেমানান অ্যাক্সেসযোগ্যতা: প্যারামিটারের ধরণটি পদ্ধতির চেয়ে কম অ্যাক্সেসযোগ্য


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বর্গ clientsহয় publicকিন্তু এটি ধরনের প্যারামিটার রয়েছে ACTInterfaceযে private(এটা কোন ক্লাসে নেস্টেড হয়?)। আপনি এটা করতে পারবেন না। আপনি ACTInterfaceকমপক্ষে হিসাবে অ্যাক্সেসযোগ্য করা প্রয়োজন clients


2
আরও তথ্যের জন্য ত্রুটি দুটিই MSDN নিবন্ধটি চেক CS0051
আলেক্সেই Levenkov

5
এটি আমাকে সাহায্য করেছিল। আমি নিম্নলিখিতটি করার চেষ্টা করছিলাম: জসনকনভার্ট.ডিজারিওলাইজ অবজেক্ট <তালিকা <নাম_আফ_মায়_মোডেল>> (প্রতিক্রিয়া। কনটেন্ট। রিডএএসআর স্ট্রিংএসিঙ্ক) (ফলাফল); "Name_Of_My_Model" শ্রেণিটি জনসাধারণ বা বেসরকারীদের মধ্যে সেট করা হয়নি। আমি যে এজ্যাক্স কল করছি তার উপরে একটি ওয়েবম্যাথড ডেকোরেটর রয়েছে এমন একটি "সর্বজনীন" পদ্ধতিতে ব্যবহার করার জন্য "নাম_আফ_মাই_মোডেল" (শ্রেণি) জনসাধারণের কাছে সেট করার দরকার আছে।
এরিক মিলিয়ট-মার্টিনেজ


1
এবং @ এরিকমিলিয়ট-মার্টিনেজ, আপনার মন্তব্য আমাকে সাহায্য করেছে। আমার আমার ক্লাসগুলির একটিতেও পাবলিক যুক্ত করা দরকার। ধন্যবাদ।
ফেটেমিরে

81

শ্রেণিকে জনসাধারণ করুন।

class NewClass
{

}

হিসাবে একই:

internal class NewClass
{

}

সুতরাং ক্লাসটি সর্বজনীন হতে হবে


27

যদি শব্দটির মতো ACTInterfaceনা publicহয় internalতবে এটির ডিফল্ট অ্যাক্সেসিবিলিটি ব্যবহার করছে (যদি এটি শীর্ষ স্তরের হয়) বা private(যদি এটি অন্য কোনওভাবে নেস্ট করা থাকে)।

publicসংশোধক প্রকারটি প্রদান করা এটি ঠিক করে দেবে।

আর একটি পদ্ধতি হ'ল ধরণ এবং পদ্ধতি উভয়ই করা internal, যদি তা আপনার উদ্দেশ্য হয়।

ইস্যুটি ক্ষেত্রের অ্যাক্সেসযোগ্যতা নয় ( oActInterface) বরং এটি ACTInterfaceনিজেই টাইপ করুন ।


9

প্রকারের অ্যাক্সেসযোগ্যতা কী support.ACTInterface। ত্রুটিটি প্রকাশ করে যে এটি প্রকাশিত নয়।

আপনি এমন কোনও পাবলিক পদ্ধতির স্বাক্ষর প্রকাশ করতে পারবেন না যেখানে কয়েকটি স্বাক্ষরের প্যারামিটার ধরণের পাবলিক হয় না। বাইরে থেকে পদ্ধতিটি কল করা সম্ভব হবে না কারণ কলার প্রয়োজনীয় পরামিতিগুলি তৈরি করতে পারেনি।

আপনি যদি support.ACTInterfaceসর্বজনীন করেন তবে এই ত্রুটিটি সরানো হবে। বিকল্পভাবে সম্ভব হলে ফর্ম পদ্ধতির অ্যাক্সেসযোগ্যতা হ্রাস করুন।


4

সমস্যাটি ভেরিয়েবলের সাথে নয় বরং ACTInterface এর ঘোষণার সাথে বলে মনে হচ্ছে। ACTInterface কোনও সুযোগ দ্বারা অভ্যন্তরীণ হিসাবে ঘোষণা করা হয়?


2

যখন আমি এই ত্রুটিটি পেয়েছি তখন আমার কাছে একটি "সহায়ক" শ্রেণি ছিল যা আমি জনসমক্ষে ঘোষণা করিনি যা এই সমস্যাটির কারণ বর্গের ভিতরে "সহায়ক" শ্রেণীর ব্যবহার করেছিল। "সহায়ক" শ্রেণিকে জনসাধারণ হিসাবে তৈরি করা এই ত্রুটিটি সমাধান করেছে, যেমন:

পাবলিক সার্ভিসক্লাস {পাবলিক সার্ভিসক্লাস (হেল্পার ক্লাস _হেল্পার) {}}

পাবলিক ক্লাস হেল্পার ক্লাস {} // সর্বজনীন হেল্পার ক্লাসটি নোট করুন যা আমার সমস্যা সমাধান করেছে।

এটির মুখোমুখি হওয়া অন্য কাউকে এটি সহায়তা করতে পারে।


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

ত্রুটিটি বলেছে 'সমর্থন.এসিটি ইন্টারফেস' কম অ্যাক্সেসযোগ্য কারণ আপনি ইন্টারফেসটিকে ব্যক্তিগত হিসাবে তৈরি করেছেন, কমপক্ষে এটি অভ্যন্তরীণ করুন বা এটিকে সর্বজনীন করুন।


1

আপনি প্যারামিটার পেতে (ক্লাসটি যার অ্যাক্সেসযোগ্যতা কম) objectতারপরে এটি asকীওয়ার্ড দ্বারা আপনার ক্লাসে রূপান্তরিত করতে পারেন ।


ভাবছেন না? আপনি এটি একটি মন্তব্য হিসাবে যুক্ত করতে পারে।
surajs1n

0

এই ত্রুটিটি যদি ঘটে থাকে যখন আপনি কোনও নতুন আকারে শ্রেণিবদ্ধযোগ্য ব্যবহার করতে চান, আপনার ক্লাসের সংজ্ঞাটি পাঠাতে হবে

Formname.Designer.cs

ফর্মনাম.সি ফাইলের পরিবর্তে।


0

আমার সত্তা ফ্রেমওয়ার্ক মডেলটি আপডেট করার পরে, আমি আমার সমাধানটিতে বেশ কয়েকটি ফাইল সংক্রামিত করে এই ত্রুটিটি পেয়েছি। আমি কেবল আমার .edmx ফাইল এবং আমার টিটি ফাইলটিতে ডান ক্লিক করেছি এবং "রান কাস্টম টুল" এ ক্লিক করেছি এবং ভিজ্যুয়াল স্টুডিও ২০১২-এর পুনঃসূচনা করার পরে এটি আবার আমাকে পেয়েছিল।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.