C# で OOP について独学しようとしていますが、いつ使用するかについて質問がありますbase
。一般的な原則は理解していますが、以下の例では何が最適かわかりません。この簡単なテストには以下が含まれます。
interface
2 つのプロパティstring
を持つ- このインターフェイスを実装し、さらにいくつかのプロパティ
abstract
を追加するクラスstring
- 抽象クラスを実装する 2 つのクラス。1 つは使用
base
し、もう 1 つは使用しませんが、プログラムの実行時にどちらも同じ出力を生成します。
私の質問は次のとおりです。この例では、ある実装が他の実装よりも望ましいですか? TranslationStyleA
と の間に意味のある違いがあるTranslationStyleB
のか 、それとも個人的な好みによるものなのか、よくわかりません。
あなたの時間と考えに感謝します!
using System;
namespace Test
{
interface ITranslation
{
string English { get; set; }
string French { get; set; }
}
public abstract class Translation : ITranslation
{
public virtual string English { get; set; }
public virtual string French { get; set; }
public string EnglishToFrench { get { return English + " is " + French + " in French"; } }
public string FrenchToEnglish { get { return French + " is " + English + " in English"; } }
public Translation(string e, string f)
{
English = e;
French = f;
}
}
public class TranslationStyleA : Translation
{
public override string English
{
get { return base.English; }
set { base.English = value; }
}
public override string French
{
get { return base.French; }
set { base.French = value; }
}
public TranslationStyleA(string e, string f) : base(e, f)
{
}
}
public class TranslationStyleB : Translation
{
private string english;
public override string English
{
get { return english; }
set { english = value; }
}
private string french;
public override string French
{
get { return french; }
set { french = value; }
}
public TranslationStyleB(string e, string f) : base(e, f)
{
this.English = e;
this.French = f;
}
}
class Program
{
static void Main(string[] args)
{
TranslationStyleA a = new TranslationStyleA("cheese", "fromage");
Console.WriteLine("Test A:");
Console.WriteLine(a.EnglishToFrench);
Console.WriteLine(a.FrenchToEnglish);
TranslationStyleB b = new TranslationStyleB("cheese", "fromage");
Console.WriteLine("Test B:");
Console.WriteLine(b.EnglishToFrench);
Console.WriteLine(b.FrenchToEnglish);
Console.ReadKey();
}
}
}