c如何在類外定義成員函式,C 如何在類外定義成員函式

時間 2021-10-14 21:28:53

1樓:定復

c++不完全是物件導向的···c#是完全物件導向的肯定要包含到類裡的,c++的那種用法就別想了我覺得,如果一個人的五臟都出了體外了,那這人還能活嗎···胡說的例子而已···見笑了

2樓:匿名使用者

一.類與結構的示例比較:

結構示例:

public struct person

}類示例:

public class testtime

}呼叫過程:

public class test

}從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class 的區別,而且使用時,定義新的結構和定義新的類的方法也非常類似。那麼類和結構的具體區別是什麼呢?

二 .類與結構的差別

1. 值型別與引用型別

結構是值型別:值型別在堆疊上分配地址,所有的基型別都是結構型別,例如:int 對應system.int32 結構,通過使用結構可以建立更多的值型別

類是引用型別:引用型別在堆上分配地址

堆疊的執行效率要比堆的執行效率高,可是堆疊的資源有限,不適合處理大的邏輯複雜的物件。所以結構處理作為基型別對待的小物件,而類處理某個商業邏輯

因為結構是值型別所以結構之間的賦值可以建立新的結構,而類是引用型別,類之間的賦值只是複製引用

注: 1.雖然結構與類的型別不一樣,可是他們的基型別都是物件(object),c#中所有型別的基型別都是object

2.雖然結構的初始化也使用了new 操作符可是結構物件依然分配在堆疊上而不是堆上,如果不使用「新建」(new),那麼在初始化所有欄位之前,欄位將保持未賦值狀態,且物件不可用

2.繼承性

結構:不能從另外一個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用sealed宣告,可是結構是隱式的sealed .

類:完全可擴充套件的,除非顯示的宣告sealed 否則類可以繼承其他類和介面,自身也能被繼承

注:雖然結構不能被繼承 可是結構能夠繼承介面,方法和類繼承介面一樣

例如:結構實現介面

nte***ce iimage

struct picture : iimage

private int x, y, z; // other struct members

}3.內部結構:

結構:沒有預設的建構函式,但是可以新增建構函式

沒有解構函式

沒有 abstract 和 sealed(因為不能繼承)

不能有protected 修飾符

可以不使用new 初始化

在結構中初始化例項欄位是錯誤的

類: 有預設的建構函式

有解構函式

可以使用 abstract 和 sealed

有protected 修飾符

必須使用new 初始化

三.如何選擇結構還是類

討論了結構與類的相同之處和差別之後,下面討論如何選擇使用結構還是類:

1. 堆疊的空間有限,對於大量的邏輯的物件,建立類要比建立結構好一些

2. 結構表示如點、矩形和顏色這樣的輕量物件,例如,如果宣告一個含有 1000 個點物件的陣列,則將為引用每個物件分配附加的記憶體。在此情況下,結構的成本較低。

3. 在表現抽象和多級別的物件層次時,類是最好的選擇

4. 大多數情況下該型別只是一些資料時,結構時最佳的選擇

3樓:胖大海

類外面是不能寫成員的, 一個檔案中允許出現多個類,但是在類外面除了引用名稱空間外 是不能定義成員函式的。

4樓:

不行的,類外不能寫方法!!

如何在c#中,在一個類裡呼叫另外一個類的方法

5樓:冰凍了你呢

把a類你有引用的方法加static

public class a

}public class b

}【拓展資料】

c#是一個物件導向的程式語言。這種程式設計模式關注的是物件的行為和屬性。比如貓抓老鼠這個例子中:貓和老鼠都是物件,用兩個類表示:貓類cat,老鼠類mouse。

貓表現出了兩種行為:聽(老鼠的叫聲)listen(mouse)和抓(老鼠)catch(mouse);至少一種屬性:行動速度speed。

老鼠表現出了一種行為:叫chitter;至少一種屬性:叫聲的大小loudness。

這樣的話可以如下定義兩個類:using system;class cat

public void catch(mouse m)     public float speed }class mouse     public float loudness }

實現貓抓老鼠的過程,就是例項化上述兩個類,並呼叫相關方法。編碼如下:

using system;  // 引用名字空間

class cat   // 行為(方法):聽老鼠叫

public void catch(mouse m)   // 行為(方法):捉老鼠

public float speed   // 屬性:捉老鼠時的行動速度

}class mouse   // 行為(方法):叫

public float loudness   // 屬性:叫聲的大小

}class program}

6樓:匿名使用者

public partial class form1 : formint z = 0; //在同一個類中不需要修飾詞就可以了private void but_ok_click(object sender, eventargs e)

private void timer1_tick(object sender, eventargs e)

7樓:匿名使用者

一種是建立窗體物件的方式,通過物件呼叫控制元件或方法例如:form1 form1 = new form1();

form1.button; //呼叫控制元件form1.method(); //呼叫方法123

當然了,控制元件的modifiers屬性要設定成public另一種是不建立窗體物件

在form1類下定義靜態變數,構造方法中引用這個form1class form1: form

public void method()

}123456789101112131415呼叫該窗體的控制元件或方法:

form1.form1.button;form1.form1.method()。

8樓:大冬子

//你新建的類a

public class a

}//視窗類

public class form1}

9樓:萬年——腐屍

假設我要在ab類中呼叫ub的屬性和方法。

class ub

}class ab

10樓:匿名使用者

你這個有錯誤。

b類中的a類沒有例項化,要報錯。

class b

11樓:mickal小米

如果要通過類名來用方法的話,那其中的方法必須是靜態方法,需加上static。

即public static void get() 。靜態方法是跟類關聯的,允許不對classa例項化,就可以用它的方法

12樓:呂建鷗

new 一個物件啊,在b類中建立一個a類的物件不就可以了

c#中在program類內和類外新定義類有什麼區別嗎? 50

13樓:匿名使用者

c#內部類能夠使用外部類定義的型別和靜態方法,但是不能直接使用外部類的例項方法。

外部類比內部類更像是一種訪問級別的限制

c#中結構和列舉能定義在類內和類外,這有什麼區別?其他類怎麼使用這個類的結構和列舉,**是怎麼寫的? 10

14樓:匿名使用者

如果是類外的話,就大家都可以用了吧。

如果是類內,其他類就用包含的類.結構或列舉

C 中類的成員函式定義成static與C中的static的函式有什麼不同

曾聽南 類的靜態成員函式不與任何物件相聯絡,它可以直接訪問類的靜態資料成員,而不能直接訪問類的普通資料成員 即非靜態資料成員 因為普通資料成員只有類的物件存在時才有意義。c中的靜態函式只在本檔案中有效。 血天藍海 如果是靜態函式 static 型別 函式名 形參 這樣的函式 它可以被 類名 函式名 ...

c為什麼要用inline來定義類外的成員函式既然可

良好的習慣是類定義裡面只寫成員函式宣告,函式定義寫在外面或者另外一個檔案。這樣的話inline顯然不是多此一舉 砍侃看 什麼叫inline定義類外的成員函式,你描述清楚些。 牧羊人使者 inline效率高吧 c 在類外部定義的成員函式是不是inline函式,沒有在內部宣告為inline 薩珺堵雁山 ...

c 如何在類中定義指向另外類的指標

直接定義即可。比如已有一個類class a,再定義一個類class b,這樣在b的定義中,就可以有一個a 型別的成員變數。比如class b 這裡的b a就是一個a 型別的指標。需要注意的是,要使用這種形式的定義,要麼a的定義在b的上方,要麼在b定義前加一個a類的宣告。如class a class ...