简体   繁体   中英

C#- static variables from class to class

First of all, take a look at my below code:

    class A
    {

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

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

And class B recieves and sends static variable:

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

        }

Class A send to B a static variable with initial value=0; then class A call bfunc from class B. In bfunc() I set flag=1. I'm a new to C#. Can you share me how class A recieves back flag=1 sended by class B. I mean which syntax?

a few things are wrong here

  1. Flag is a method on A, so you cannot change its "value"
  2. Flag is static therefore it does not have an instance which is what I think you want
  3. I suspect you want Flag to be a property of A

     public int Flag{get;set;} 
  4. You are making new instances of A and B , which may be correct for you but be weary this means you are not referencing existing instances

  5. You have two options

A

 this.Flag = b.bFunc();

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

B

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

If you really want static variable then

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

Were is no static variable here, you only have a static function int Flag() . To get value of a flag in class A, you must return this value from function bfunc() like this:

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

I don't know if I understood you properly because there are many things wrong with your code. Flag should be a property instead of a method so you can store your value. The way you used it was just tossing out a zero.

First, your two classes. Keep in mind that usually properties should be used as accesssors to private fields, but let's do it the simplest way.

class A
{
    public static int Flag = 0;
}

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

Then use them as follows to change Flag 's value.

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

Note that bfunc() will change Flag 's value to 1 only if it was 0 before.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM