從Csharp走到VB.Net(一):MyClass保留字
2024-07-10 13:00:53
供稿:網友
2003年開始我接觸的第一個b/s項目是dotnet,用的是csharp.到現在2年過去了,也接觸了vb.net的項目,一步步走過來,看到同時clr平臺,2種語言在保留字上的特性還是很大的.
以下我一一列來:
關于myclass,大家請先建立一個vbconsoleapplication程序,將本文sourcecp進去
module module1
class baseclass
public overridable sub mymethod()
console.writeline("father is 50 years old!")
end sub
public sub useme()
me.mymethod() ' use calling class's version, even if an override.
end sub
public sub usemyclass()
myclass.mymethod() ' use this version and not any override.
end sub
end class
class derivedclass : inherits baseclass
public overrides sub mymethod()
console.writeline("child is just 25 years old!")
end sub
end class
sub main()
dim child as new derivedclass
child.useme()
child.usemyclass()
console.readline()
end sub
end module
但是在csharp里竟然無法實現,c#怎樣也不允許我按非虛函數的方式調用一個虛函數。c++可以用類名::方法名的方式訪問自身版本的函數,但c#的類名只能用來訪問靜態的成員。這真是c#一個奇怪的限制。也許是我少見多怪吧.在msdn中是這么描述的:
myclass 的行為類似于引用最初實現時類的當前實例的對象變量。myclass 與 me 類似,但對它的所有方法的調用都按該方法為 notoverridable 來處理。因此,所調用的方法不受派生類中的重寫影響。盡管 derivedclass 重寫了 mymethod,但 usemyclass 中的 myclass 關鍵字使重寫的影響無效,編譯器會將該調用解析為 mymethod 的基類版本。
myclass 不能在 shared 方法內部使用,但您可以在實例方法內部使用它來訪問類的共享成員。
但是在csharp里竟然無法實現,c#怎樣也不允許我按非虛函數的方式調用一個虛函數。c++可以用類名::方法名的方式訪問自身版本的函數,但c#的類名只能用來訪問靜態的成員。這真是c#一個奇怪的限制。也許是我少見多怪吧.在msdn中是這么描述的:
myclass 的行為類似于引用最初實現時類的當前實例的對象變量。myclass 與 me 類似,但對它的所有方法的調用都按該方法為 notoverridable 來處理。因此,所調用的方法不受派生類中的重寫影響。盡管 derivedclass 重寫了 mymethod,但 usemyclass 中的 myclass 關鍵字使重寫的影響無效,編譯器會將該調用解析為 mymethod 的基類版本。
myclass 不能在 shared 方法內部使用,但您可以在實例方法內部使用它來訪問類的共享成員。
這點在商業應用中還是很不錯的,比如父類為一個employeebase,包含一個底薪的數據,那么在實例化雇員的employee中,dim e1 as new employee(employeeid),增加員工的底薪的時候,在o/r映像模型建立好之后只需要調用e1.addsalary(salary)方法即可調用基類的底薪修改方法.(即統一加底薪).個人意見,呵呵,所得不好,還請大家多多指教.