2012-07-01 3 views
0

У меня есть 2 классов в проекте, как это:Внутренний доступ Модификатор

namespace ConsoleApplication1 
{ 
    internal class ClassA 
    { 
     internal int dataMember; 
    } 
} 

и

namespace ConsoleApplication1 
{ 
    class ClassB 
    { 
     static void Main(string[] args) 
     { 
      ClassA c = new ClassA(); 
      Console.Write(c.dataMember); //Cannot access?? 
     } 
    } 
} 

Я использовал внутренний модификатор доступа для класса А и его член данных

Хотя объект класса А может быть создан в основном классе b, но почему я не могу получить доступ к его члену данных с помощью спецификатора внутреннего доступа в рамках одной и той же сборки?

Вот ошибка, что он дает в VS 2010:

'ConsoleApplication1.ClassA.dataMember' недоступен из-за его уровня защиты

+1

'dataMember' доступен ([ideone] (http://ideone.com/3xfBM)). Возможно, вам не хватает директивы 'using System; ', поэтому *' Console' * не отображается? –

+1

Можете ли вы показать нам скриншот, показывающий ваш макет проекта, код и сообщение об ошибке? Это может дать нам некоторые намеки. –

ответ

2

Вы должны быть в состоянии. Ваш точный код - просто добавление директивы using System; - компилируется для меня.

Убедитесь, что вы действительно сохранили все файлы и т. Д. - и если есть ошибка времени компиляции, включите это в свой вопрос. Возможно, что-то не так в ClassA (что вы нам не показали), что мешает компиляции этого класса?

Также убедитесь, что это действительно в том же проекте - не только в том же пространстве имен.

+0

, используя VS 2010, он доцент, похоже, работает – Akash

+3

@Akash: Я подозреваю, что код, который вы отправили, не является кодом, который вы создаете, или что это не все * код, который вы строите. То, что вы действительно опубликовали, действительно работает. Скопируйте и вставьте * all * код, который у вас есть, в вопрос. Я очень сомневаюсь, что это проблема компилятора. –

0

Я получаю результаты так:

internal class A 
    { 
     internal int X = 5; 
    } 
    static class B 
    { 
     public static void Show() 
     { 
      A a = new A(); 
      MessageBox.Show(a.X.ToString()); 
     } 
    } 
    private void Form2_Load(object sender, EventArgs e) 
    { 
     B.Show(); 
    } 

, а также таким образом:

internal class A 
    { 
     internal int X = 5; 
    } 
    private void Form2_Load(object sender, EventArgs e) 
    { 
     A a = new A(); 
     MessageBox.Show(a.X.ToString()); 
    } 
Смежные вопросы