2013-11-01 3 views
0
namespace A 
{ 
     public enum ABC 
     { 
     } 
     public class ClassA 
     { 
      static ClassA() 
      {} 
      public static bool f_name 
      { 
      } 
      //All the rest of the functions are also static 
     } 
} 

namespace B 
{ 
     using A; 
     public partial class ClassB 
     { 
       private bool x; 
       public ClassB() 
       {} 
       static void Main() 
       { 
         x = ClassA.f_name; 
       } 
     } 
} 

оба пространства имен находятся в разных файлах. При запуске этого кода ClassA.f_name не работает. Его почему-то игнорируют. Когда я накладываю на него часы, он говорит, что «Имя« ClassA »не существует в текущем контексте». Может ли кто-нибудь сказать мне, почему? также что мне нужно сделать, чтобы исправить это?Я пытаюсь выполнить следующий код на C#, но его каким-то образом дал мне ошибку

Когда я использовал «A.ClassA.f_name», тогда он работал нормально. Но мне не нужно писать «А.», поскольку я уже включил пространство имен A. Заранее спасибо за помощь.

Я бегу это в Visual Studio 2010, Windows 7. Я поставил порядок сборки таким образом, что пространство имен А компилироваться до имен В.

+1

ли они в различных сборках? Ваш комментарий о порядке сборки говорит мне, что у вас, вероятно, есть проблема с проектом/решением проблемы, а не с проблемой кода. –

+2

У вашего кода есть несколько проблем, сначала 'f_name', если это поле, тогда удалите' {} ', и если это метод, тогда поместите'() ', также в' ClassB', вы пытаетесь получить доступ к экземпляру член в статическом методе. – Habib

+0

да, они находятся в разных сборках. да, это часть более крупного проекта. им не удалось исправить эту часть. я действительно хочу получить доступ к функциям ClassA во всем проекте – user2945623

ответ

0

проблема у вас есть из-за того, что вам нужно доступ к статическому классу A с нестационарной переменной x. chnage ваших классов:

namespace A 
{ 
    public enum ABC 
    { 
    } 
    public class ClassA 
    { 
     static ClassA() 
     { } 
     public static bool f_name 
     { 
      get { return true; } 
     } 

     //All the rest of the functions are also static 
    } 
} 

namespace B 
{ 
    using A; 
    public partial class ClassB 
    { 
     /// changed this to static to match access on class A 
     private static bool x; 
     public ClassB() 
     { } 
     static void Main() 
     { 
      x = ClassA.f_name; 
     } 
    } 
} 

и все будет хорошо

+0

попробовал. im все равно получаю ту же ошибку – user2945623

+0

не может быть :) - используйте код ТОЧНО, когда я вставил его –

+0

@jimtollan: Учитывая, что, по-видимому, исходный код работал, добавляя 'A.' перед' ClassA', я не уверен что проблема в том, что вы думаете или что код OP на самом деле то, что у него выше, поэтому C & P может быть нелегким. – Chris

0

вы используете два разных пространства имен .hence он получил решен, когда вы добавили ссылку на пространство имен А.

+0

, но мне все еще нужно добавить «A.» даже если ive использует «использование A»? – user2945623

+0

Вам не нужно добавлять A, если вы уже обращаетесь к нему, просто обновите и посмотрите, работает ли он. –

+0

эта проблема не работает без "А." Я не знаю почему. перечисление работает отлично без A., но не ClassA – user2945623

Смежные вопросы