2009-11-26 59 views
0

那麼其簡單的在這裏你有我的vb.net代碼:VB.net Overridable屬性不同於C#虛擬屬性?

Public Class Class1 
    Public Overridable ReadOnly Property Name() As String 
     Get 
      Return Nothing 
     End Get 
    End Property 
End Class 

Public Class Class2 
    Inherits Class1 
    Public Overloads ReadOnly Property Name() As String 
     Get 
      Return "Class2" 
     End Get 
    End Property 
End Class 

Module Module1 
    Sub Main() 
     Dim c2 As New Class2() 
     Console.WriteLine(c2.Name) 
     Dim c1 As Class1 = CType(c2, Class1) 
     Console.WriteLine(c1.Name) 
    End Sub 
End Module 

這裏來的C#代碼:

class Class1 
{ 
    public virtual string Name 
    { 
     get 
     { 
      return null; 
     } 
    } 
} 

class Class2 : Class1 
{ 
    public override string Name 
    { 
     get 
     { 
      return "Class2"; 
     } 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class2 c2 = new Class2(); 
     Console.WriteLine(c2.Name); 
     Class1 c1 = (Class1)c2; 
     Console.WriteLine(c1.Name); 
    } 
} 

我沒有expekt他們做同樣的事情,但你猜怎麼着大公不! C#輸出

的Class2

的Class2

VB.NET輸出

的Class2

{沒什麼}

(它dosent打印無關它只是打印一個空行) 爲什麼vb.net在被覆蓋時用於基類實現?

回答

12

它應該覆蓋,而不是重載?

Public Overrides ReadOnly Property Name() As String 
+0

VB.NET:覆蓋 – 2009-11-26 08:11:55

+0

是的,它的覆蓋,重載是添加更多的參數。 – 2009-11-26 10:52:20

+0

這顯然是正確的答案,但編譯器爲什麼不給出錯誤? – MarkJ 2009-11-26 12:10:42