سؤال

أنا باستخدام فئات جزئية إلى تقسيم بعض الوظائف بين 2 الملفات ولكن أنا على الحصول على خطأ.ما الخطأ الذي فعلته ؟

A1.cs:

private partial class A
{
    private string SomeProperty { get { return "SomeGeneratedString"; } }       
}

A2.cs:

private partial class A
{
    void SomeFunction()
    {
        //trying to access this.SomeProperty produces the following compiler error, at least with C# 2.0
        //error CS0117: 'A' does not contain a definition for 'SomeProperty'
    }
}
هل كانت مفيدة؟

المحلول

وهما فئات جزئية في نفس مساحة الاسم؟ ويمكن أن يكون تفسيرا لذلك.

نصائح أخرى

نفس الإجابة @أندري ك لكن بعبارات بسيطة

تعيين بناء العمل من جميع فئات جزئية إلى 'تجميع' باستخدام 'خصائص' ويندوز كل من هذه الملفات

Properties window - loading= Build action property">

ومساحة مختلفة؟

في البداية، لم أتمكن من إعادة إنتاج خطأ الخاص بك.

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

إذا كنت الاحتفاظ بها سرا وعش لهم ضمن فئة أخرى، كل شيء يعمل بشكل جيد.

وأنا يمكن أن تتكاثر الخطأ فقط عندما، في ملف واحد، ولدي جزء من الطبقة تداخل داخل فئة أخرى، وفي ملف آخر، وأنا لا عش الطبقة، ثم قم بإزالة الكلمة خاصة ... مثل هذا:

وClass1.cs:

namespace stackoverflow.answers
{
    public class Foo
    {
        private partial class Bar
        {
            private string SomeProperty { get { return "SomeGeneratedString"; } }
        }
    }
}

وClass2.cs:

namespace stackoverflow.answers
{
    partial class Bar
    {
        void SomeFunction()
        {
            string bar = this.SomeProperty;
        }
    }    
}

وأنا أيضا الحصول على الخطأ وصفت لكم إذا تختلف مساحات الأسماء.

يرجى الرد على رمز بأكمله عن الحل، لأن التعليمات البرمجية المقدمة غير صالح C # لغوي، ولا يمكن أن ينظر إلى دون مزيد من السياق.

تحرير:

الحل:بناء عمل -> Complile أي شيء آخر

سأحاول أن أكون أكثر تحديدا:

كان لدي محاضرة مشتركة بين 3 فئات جزئية في 3 ملفات مختلفة.في لحظة واحدة استدعاء دالة (من جزء واحد من وظيفة أعلن في جزء آخر) بدأت تظهر خطأ "لا وجود لها في السياق الحالي".استغرق الأمر مني وقتا طويلا حتى بعض الرجل ساعد لي معرفة ذلك عن طريق الخطأ أنا وضعت بناء عمل الملف مع جزء واحد إلى "EmbeddedResourse" بدلا من "تجميع".

للتبديل بناء العمل يجب أن انقر بزر الماوس الأيمن على الملف في "مستكشف الحلول" ثم اختر خصائص.ثم تغيير بناء العمل.

هذا السؤال القديم, و جوابي هو ليس بالضبط مفيدة في هذه الحالة.ولكن قد يكون من المفيد في واحدة أخرى نادرة جدا القضية المتعلقة فئات جزئية.آسف إذا لغتي الإنجليزية ليست واضحة.

واعتقد انها لأنك تعلن صفك ب "الخاص". حاول تغيير معدل ل"الداخلية" حتى أن اثنين من "نصفين" الطبقة يمكن "رؤية" بعضها البعض ضمن نفس التجميع.

والخطأ أحصل هو:

<اقتباس فقرة> عناصر محددة في مساحة لا يمكن أن تعلن صراحة أنها خاصة وحمايتها، أو حماية داخلية

وانا التخمين انها مسألة مساحة الاسم كما ذكر سابقا.

ويجب أن تكون جميع الملفات في مجلد واحد.

وI تحليل التعليمات البرمجية. كنت أعلن الطبقة جزئية من الطبقة المتداخلة هذا يسبب لإظهار الخطأ. لماذا سوف فئة جزئية BCZ لا تعلن الفئة كما المتداخلة يتم تقسيم الكلمة إلى parial ultiple ملفات ذلك، في كل دار الوثائق الملف هو نفسه عند أعلن في فئة متداخلة انها لن تعترف.

وهناك حالة الزاوية حيث مساعدة إضافية يمكن أن توفر لك الوقت هو إذا كنت تستخدم فئة جزئية لتكمل نص وقت التشغيل الدرجة القالب الذي تم إنشاؤه.

وهناك احتمالات بأن المشكلة هي في الواقع بأن ما تتمتعون به الجزئي الفئة 'مساحة مختلفة من مساحة الجزء المتولدة من تلك الفئة. للتحقق ذلك، ببساطة ننظر إلى الشفرة التي تم إنشاؤها.

لتحديد ذلك، تحتاج إلى تحرير الملف .csproj لمشروعك، وفي المقطع حول هذا القالب، إضافة العلامة <ClassNamespace>:

<Content Include="MyTemplate.tt">
  <Generator>TextTemplatingFilePreprocessor</Generator>
  <ClassNamespace>My.Namespace</ClassNamespace>
  <LastGenOutput>MyTemplate.cs</LastGenOutput>
</Content>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top