C#語言中數(shù)據(jù)類型可分為兩大類:值類型和引用類型。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比龍湖網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式龍湖網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋龍湖地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
值類型包括:基本數(shù)據(jù)類型(int,long,float,char,bool)、枚舉類型(enum)、結(jié)構(gòu)類型(struct);
引用類型包括: 類、接口、數(shù)組。
從你說的“a和b就像是一個(gè)對(duì)象”可以得出:a和 b都是引用類型。 為什么會(huì)有“a和b就像是一個(gè)對(duì)象”
這樣感覺呢? 這是因?yàn)橹殿愋妥兞亢鸵妙愋妥兞吭趦?nèi)存中的存儲(chǔ)方式不同,值類型變量是對(duì)數(shù)據(jù)的直接
擁有,而引用類型變量只是通過地址對(duì)數(shù)據(jù)的擁有(即:不是實(shí)際擁有)。 建議提問者首先了解兩類變量
的存儲(chǔ)機(jī)制,這樣可以更好的幫助你理解問題。
下面給出代碼,幫助你理解
// 值類型變量
public static void Main(string[] args)
{
int a = 5;
b = a; // 需要關(guān)鍵理解的地方
b = 10;
Console.WriteLine(b); // 打印輸出 10
Console.ReadLine();
}
// 引用類型變量
public static void Main(string[] args)
{
Student stu1 = new Student();
Student stu2 = new Student();
stu1.Name = "周杰倫";
stu2 = stu1; // 需要關(guān)鍵理解的地方?。?!
stu2.Name = "方文山";
Console.WriteLine(stu1.Name); // 打印輸出 方文山
Console.ReadLine();
}
Structure是值類型,classe是引用類型 Structure用棧來分配; classe用堆來分配 structure的成員默認(rèn)情況下是公共的,而Class的成員變量和常量默認(rèn)情況下是私有的而其它成員默認(rèn)情況下是公共的.這與VB6是相兼容的。 structure必須至少有一個(gè)非共享的成員變量或事件成員,class可以完全是空的. Structure的成員不能聲明成Protected; class成員可以. 一個(gè)structure過程只能在它是一個(gè)Shared Sub時(shí)才能handle events而且只能通過AddHandler語句;而任何class過程都可以handle events,既可以用Handles關(guān)鍵字或 AddHandler語句。 Structure variable declarations cannot specify initializers, the New keyword, or initial sizes for arrays; class variable declarations can. Structure繼承自ValueType類,不能從其它任何類型繼承; classes可以從任何不是ValueType的類繼承 Structure不能繼承而Class可以 Structure從來不析構(gòu)terminated因此common language runtime (CLR)從來不調(diào)用它的Finalize方法,classe由垃圾回收器進(jìn)行析構(gòu), 當(dāng)沒有任何對(duì)該類的引用時(shí)調(diào)用它的Finalize方法 structure 不需要一個(gè)構(gòu)造函數(shù),而Class需要 Structure只能有帶參數(shù)的非共享的構(gòu)造函數(shù); classes 可以有帶或不帶參數(shù)的構(gòu)造函數(shù). 每個(gè)Structure都有一個(gè)默認(rèn)的不帶參數(shù)的構(gòu)造函數(shù)以對(duì)其成員進(jìn)行初始化,你可以重新定義該函數(shù)
在項(xiàng)目A里添加引用,在“添加引用”對(duì)話框里找到項(xiàng)目B就可以了。也可以先把項(xiàng)目B生成dll文件,然后在項(xiàng)目A中添加對(duì)這個(gè)dll文件的引用。
1.對(duì)象變量與對(duì)象本身是不同的,對(duì)象變量代表了對(duì)象真實(shí)數(shù)據(jù)在內(nèi)存中的地址.
打個(gè)比方,“對(duì)象變量”就象你家的地址,“對(duì)象本身”就象你家。
你不能說你家的地址(xx路xx號(hào)xx房)就是你家,但是可以通過這個(gè)地址而找到你家。
2.傳值的參數(shù)本身是被復(fù)制一份的,但這并不意味著它所代表的對(duì)象也被復(fù)制一份.
有如下一個(gè)函數(shù):
Public
Function
Do_delete(ByVal
ps_usr_id
As
String)
As
Boolean
你在調(diào)用時(shí)可能這樣調(diào)用:
dim
strID
as
string
strID
=
"kknd001"
if
Do_delete(strID)
then.....
當(dāng)程序執(zhí)行到Do_delete函數(shù)體里面時(shí)ps_usr_id變量其實(shí)是按照StrID的值而復(fù)制的一個(gè)變量。
Private Function ReadFile(ByRef a As String) As String
a = "bian"
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a As String = "yuanlai"
ReadFile(a)
''想要的結(jié)果就是在這里使用a的值是"bian"
MsgBox(a)
End Sub
===================
以上就可以,不知道你“ByRef a As b”的b是什么東西
以class2為例,如果你只需要一個(gè)class2實(shí)例,那么把它在class1成員中聲明為共享成員即可。
Shared c2 As New Class2()
然后調(diào)用它的函數(shù),
c2.func()
如果class2的這個(gè)函數(shù)不依賴于class2實(shí)例,那么直接將這個(gè)函數(shù)用Shared聲明,
Public Shared Function func() As xxx
'xxxxx
End Function
然后在class1中引入,
Imports class2
直接調(diào)用即可。
func()
我想第二種更符合你的情況。