查看完整版本: 呼叫不同類別之物件方式
頁: [1]

iansuperian 發表於 2017-11-6 10:19 PM

呼叫不同類別之物件方式

如題
假如我的class有A,B,C三個
B class裡全部宣告物件
A,C有沒有辦法以宣告方式
直接取用B裡面的物件?
ex.
class
public static int x,y;

class C
public static B B_Object;
B_Object = new B;

類似這樣
但是我在自己的範例中使用
卻還是無法在C裡使用x,y
不知道這樣做有甚麼問題?
或是還需要注意甚麼?

新手發問請不吝賜教

<div></div>

joanna57kimo 發表於 2017-11-7 01:12 AM

宣告成 public static B
就能直接在 Class C 裡面存取 B.x, B.y 了!
簡單講 static 的功能就是不用 New 就會存在的 Instance...

羕漾 發表於 2017-11-25 02:08 AM

本帖最後由 羕漾 於 2017-11-25 02:17 AM 編輯

有點看不太懂,你是指像是有一個 B 類別,定義了 x 及 y 兩個 static 變數嗎?
public class B {
    public static int x, y;
}
然後想在 C 類別中實體 B 後呼叫兩個靜態變數?
public class C {
    void main() {
         B objB = new B();
         // get objB.x -> 類似這樣 ???
    }
}
靜態變數不允許實體時呼叫,所以你需要直接用 B.x 來呼叫,不能使用 objB.x 呦!...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

Josie_2016 發表於 2017-11-25 07:29 AM

不用自己建立實體(不用new)

假設有一類別public class B
{
            public static int x=10;//靜態欄位
            public static int y = 15;//靜態欄位
            public static int Sum(int a, int b) //靜態方法
            {
                return a + b;
            }
}使用static void Main(string[] args)
{

            Console.WriteLine(B.x);//直接取用,不用new
            Console.WriteLine(B.y);//直接取用,不用new
Console.WriteLine(B.Sum(100,200));//直接取用,不用new
            Console.ReadLine();
}就像上面WriteLine及ReadLine是Console類別的靜態(static)方法...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

rr09192084 發表於 2017-12-28 02:53 PM


static void Main(string[] args)
        {
            A.a_X = 15; //A class的a_X是靜態成員,所以可以直接存取或是指定。
            A.a_Y = 15; //A class的a_Y是靜態成員,所以可以直接存取或是指定。
            B b_class = new B(12, 13); //B class 有寫建購子函式,所以用建構函式指定b_X和b_Y的值。
            Console.WriteLine("A class SUM =" + A.a_Sum().ToString()); //A class 的 a_X 和 a_Y 都指定為15,所以a_SUM是30。
            Console.WriteLine("B class SUM =" + B.b_Sum().ToString()); //B class 建構函式中指定了X=12,Y=13,所以b_SUM是25。
            Console.WriteLine("C class SUM =" + C.c_Sum().ToString()); //C class 的X 和Y 預設值是和B class 的預設值(X=6, Y=8)一樣,所以c_SUM是14。
            C.c_X += 1; //C class的c_X值+1,c_X=7。
            Console.Write("c_X + 1 = " + C.c_X.ToString());
            C.c_Y += 5; //C calss的c_Y值+5,c_Y=13。
            Console.Write(" , c_Y + 5 = " + C.c_Y.ToString());
            Console.WriteLine(" , C class SUM = " + C.c_Sum().ToString()); //C class 的 c_SUM 變成 7 +13 等於20。
            Console.Write("Press any key to exit...");
            Console.ReadKey();
        }
    }

    public class A
    {
        public static int a_X;
        public static int a_Y;
        public static int a_Sum()
        {
            return a_X + a_Y;
        }
    }

    public class B
    {
        public static int b_X = 6;
        public static int b_Y = 8;

        public static int b_Sum()
        {
            return b_X + b_Y;
        }
        public B(int a, int b) //建購子函式
        {
            b_X = a;
            b_Y = b;
        }
    }

    public class C
    {
        public static int c_X = B.b_X;//靜態成員可以直接存取
        public static int c_Y = B.b_Y;//靜態成員可以直接存取

        public static int c_Sum()
        {
            return c_X + c_Y;
        }
    }
參考看看...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

joanna57kimo 發表於 2018-1-1 12:41 AM

建議使用5樓的程式碼進行 Debug,從 main() 第一行用 F11 逐行去看程式是怎麼執行的!
然後再修改其中一個 Class 不要宣告成 static 之後,再 trace 一遍,
最後透過兩種不同宣告方式的測試,思考一下何謂變數的生命週期!
頁: [1]