在C#中,我有以下代码:
公共财产暴露我的私人领域
namespace InheritenceTest
{
class Program
{
static void Main(string[] args)
{
ChildClass childClass = new ChildClass();
Console.WriteLine(childClass.SomeString);
Console.ReadLine();
}
}
public class BaseClass
{
public BaseClass()
{
InitClass();
}
protected virtual void InitClass()
{
// Do Nothing here
}
}
public class ChildClass: BaseClass
{
private string _someString = "Default Value";
public ChildClass()
{
}
protected override void InitClass()
{
base.InitClass();
_someString = "Set in InitClass()";
}
public string SomeString
{
get { return _someString; }
set { _someString = value; }
}
}
}
Run Code Online (Sandbox Code Playgroud)此程序的控制台输出是"在InitClass()中设置".
现在我将这段代码转换为VB.NET.
Imports System
Imports System.Collections.Generic
Imports System.Text
Namespace InheritenceTest
Module Program
Public Sub Main(ByVal args As String())
Dim childClass As New ChildClass()
Console.WriteLine(childClass.SomeString)
Console.ReadLine()
End Sub
End Module
Public Class BaseClass
Public Sub New()
InitClass()
End Sub
Protected Overridable Sub InitClass()
' Do Nothing here
End Sub
End Class
Public Class ChildClass
Inherits BaseClass
Private _someString As String = "Default Value"
Public Sub New()
End Sub
Protected Overrides Sub InitClass()
MyBase.InitClass()
_someString = "Set in InitClass()"
End Sub
Public Property SomeString() As String
Get
Return _someString
End Get
Set(ByVal value As String)
_someString = value
End Set
End Property
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
该VB.NET程序的输出是"默认值".
在调试时查看代码(VB.NET代码)时,您会看到当构造函数完成它的工作时,会设置默认值,而对于C#,则是另一种方式(首先设置默认值,而不是构造函数)叫做).
任何人都可以解释为什么会这样吗?哪两种语言"正确"?
这两种语言在解决这一特定问题的方式上略有不同.
至于为什么这样做是在C#中完成的,你应该查看Eric关于这个主题的博客系列
至于VB.Net中的原因.我不完全确定VB.Net选择这种特殊方法的原因.我的袖口猜测是VB6兼容性问题,但我甚至不确定VB6是否有类似的情况.
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |