2013-07-10 2 views
0

Прежде всего, посмотрите на мой код ниже:C# - статические переменные из класса в класс

class A 
    { 

     public static int Flag() 
     { 
        return 0;// set initial value=0 
     } 

     B b= new B(); 
     public void afunc() 
     { 
      b.bfunc(); 
     } 
    } 

А класс B recieves и отправляет статическую переменную:

 class B 
     { 
      A a= new A(); 
      int flag= a.Flag(); 
      public void bfunc() 
      { 
       if(flag==0) 
       { 
        flag=1;//???? is this wrong??? 
        //do some thing 
       } 
      } 

     } 

класса А отправить B статическая переменная с начальным значением = 0; то класс A вызывает bfunc из класса B. В bfunc() я устанавливаю флаг = 1. Я новичок в C#. Можете ли вы рассказать мне, как класс A возвращает задний флаг = 1, отнесенный классом B. Я имею в виду, какой синтаксис?

+0

Вы действительно хотите статический метод? это похоже на свойство 'A' для меня – Sayse

+0

Что вы хотите достичь этим? Я немного смущен ...Зачем вам нужно получить 0 из класса A, если он всегда будет давать вам 0 в качестве статического метода? –

+1

Я чувствую себя как никто ... :(Я имею в виду, я чувствую себя как г-жа Nobody, так как я тоже немного смущен в вопросе. Какая цель здесь? – Shaamaan

ответ

2

несколько вещей, которые неправильны здесь

  1. Flag является метод на А, так что вы не можете изменить его «значение»
  2. Flag статична поэтому он не имеет экземпляр, который является то, что я думаю, что вы хочу
  3. Я подозреваю, что вы хотите Флаг быть собственностью A

    public int Flag{get;set;} 
    
  4. Вы делаете новые экземпляры из A и B, который может быть правильным для вас, но устанут это означает, что вы не ссылки на существующие экземпляры

  5. У вас есть два варианта

this.Flag = b.bFunc(); 

public int bFunc() 
    .... return 1; 

B

public void bFunc() 
... a.Flag = 1; 

Если вы действительно хотите статическую переменную, то

public static int Flag = 0; 
A.Flag = x 
0

Здесь нет статической переменной, у вас есть только статическая функция int Flag(). Чтобы получить значение flag в классе А, вы должны вернуть это значение из функции bfunc() так:

public int bfunc() 
     { 
      if(flag==0) 
      { 
       flag=1; 
       return flag; 
      } 
     } 
0

Я не знаю, если я правильно вас понял, потому что есть много вещей неправильно с вашим кодом. Flag должен быть свойством вместо метода, чтобы вы могли сохранить свое значение. То, как вы его использовали, просто выбрасывало ноль.

Во-первых, ваши два класса. Имейте в виду, что обычно свойства должны использоваться как accesssors для частных полей, но давайте сделаем это самым простым способом.

class A 
{ 
    public static int Flag = 0; 
} 

class B 
{ 
    public void bfunc() 
    { 
     if (A.Flag == 0) 
     { 
      A.Flag = 1; 
     } 
    } 
} 

Затем используйте их следующим образом изменить значение Flag «s.

B bObject = new B(); 
bObject.bfunc(); 
// A.Flag is now 1. 

Обратите внимание, что bfunc() изменит значение Flag «S 1, только если оно было 0 раньше.

+0

Я не подумайте, что вы можете изменить значение свойства конструктора класса, но сначала вам нужно сделать новый член этого класса и применить его к нему? –

+0

@ Ms.Nobody Нет S_F верен, это не конструктор классов, который является статическим полем внутри класса который инициализируется на '0', когда на первый раз ссылается тип' A'. –

+0

@BobVale не уверен, если я хорошо понимаю, но я думал, что если что-то статическое, вы не можете его изменить, но теперь вы меняете static int value. Mhmmm ...? –

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