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 ...