В C # у меня есть следующий код:
- базовый класс с виртуальной функцией InitClass ()
- дочерний класс, который переопределяет функцию InitClass (). В этой функции я установил приватную переменную
публичная собственность, выставляющая мое личное поле
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; }
}
}
}
Консоль выводит из этой программы «Set in 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
Выход этой программы VB.NET - «Значение по умолчанию».
Когда вы смотрите на код во время отладки (код VB.NET), вы видите, что когда конструктор завершил свою работу, значение по умолчанию устанавливается, в то время как для C # это наоборот (сначала устанавливается значение по умолчанию, чем называется конструктор).
Может кто-нибудь объяснить мне, почему это так? А какой из 2 языков является "правильным"?