سؤال

بالنظر إلى الفئة A ، التي تحتوي على مجموعات من البيانات الأولية ، والفئة B ، والتي تحتوي على نسخة معاد تنظيمها (جاهزة واجهة المستخدم الرسومية) لتلك البيانات ، أود عمل البيانات الأولية في مرئية في B.

من الواضح أن البيانات الأولية في الفئة A موجودة في أعضاء القطاع الخاص. أرغب في جعل هذه البيانات مرئية في B على الرغم من استخدام شيء أقرب إلى طريقة فئات C ++ Friend.

كيف يمكنني التعامل مع هذا؟

شكرًا لك.

هل كانت مفيدة؟

المحلول

بالمعنى الدقيق للكلمة ، لا يمكنك تحديد فئة معينة (أو قائمة من الفئات) التي يمكنك تعريض البيانات إليها. ومع ذلك ، يمكنك استخدام internal معدل الوصول بدلاً من private, ، مما يجعل الأعضاء متاحين لأي فصل في نفس التجمع.

أن يقال ، يجب عليك بقوة فكر في تعريض هؤلاء الأعضاء من خلال العقارات بدلاً من الحقول (وهو ما أعتقد أنك تخطط لفضحه). سيسمح القيام بذلك بالفصل بتحديد بالضبط كيفية تعرض هذه المعلومات لفئات أخرى وماذا-إذا كان أي شيء-يجب أن يحدث عندما يغير فئة أخرى البيانات.

نصائح أخرى

قد يكون هذا قد يساعدك ..

public class A
{
    public A() { }

    public string AccessData(object accessor)
    {
        if (accessor is B)
            return "private_data";
        else
            throw new UnauthorizedAccessException();
    }
}

public class B
{
    public B() { }

    private void AccessDataFromA()
    {
        Console.WriteLine(new A().AccessData(this));
    }
}

يمكنك تحديد كل من التجميع وتمييز الحقول في "داخلي".

تتمثل نهج OO الأكثر في توفير مجموعة من الأساليب العامة في A التي تسمح بالوصول إلى البيانات (أو مجموعة فرعية من البيانات) ، عادةً عبر خصائص بسيطة.

اعتمادًا على هيكلك ، قد تكون قادرًا على استخدام الفصول الجزئية. هذا يعني أن البيانات وواجهة المستخدم هي في الواقع في نفس الفئة ، ولكن لديك داخل ملفات مختلفة.

إذا لم ينجح ذلك من أجلك ، فعندئذٍ لديك متغيرات محددة داخلية كبديل أو تعمل مع مجموعات البيانات التي تمثلها واجهة المستخدم بطريقة أكثر عامة.

الطريقة القديمة (التورية المقصودة) ستكون لتحديد بسيط الحصول على قيمة() و setValue () وظائف لإرجاع هذه القيمة بحيث تصبح هذه القيم يمكن الوصول إليها دون استخدام هذه الوظائف ، في C# هذه الوظائف هي أعضاء محددين مسبقًا يسمى الخصائص.

class TestMethod{ 
private int Secret;

get { return Secret;}
set { Secret = value;}
}

الطريقة الأخرى هي ، كما ذكر الآخرون قبلي ، فقط استخدم internal المعدل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top