しばらくの間、C# (および他のいくつかの言語) でプログラミングを行ってきましたが、最近、オブジェクト指向プログラミングの感覚をつかむために、カスタム クラスの記述を開始する必要があると判断しました。そのために、継承に取り組むために、Vehicle の基本クラスといくつかの派生クラスから始めました。
ここで私がやろうとしているのは、Vehicle の基本呼び出しにいくつかのデフォルト値とロジックを設定し、派生クラスに違いを決定するいくつかの情報を実装させることです。たとえば、基本クラスで _wheelsNumber、_motorType、および _horsePower 変数とロジックを設定している間に、各クラス (Car、Truck、Semi、Moped など) で _wheelsNumber を設定し、ロジックの流れをトリガーして計算します。残りのプロパティを削除します。
ただし、これらの目的を達成するために適切な方法でクラスを作成したかどうかはわかりません。コンストラクターと get/set アクセサーを使用してリモートで正しいことを行っているかどうかについては明確ではありません (ユーザーに車の車輪の数などを選択させたくないため、私はしていません)宣言された set アクセサー)。私が気づいたと思うことの 1 つは、ユーザーがモーターの種類の前と馬力の前に車輪の数をプログラムに問い合わせる必要があることです。これは、コンストラクター内で計算されていないためだと思いますが、よくわかりません。
誰でも明確に理解していただければ幸いです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace VehicleClasses
{
abstract public class Vehicle
{
protected const int smallMotor = 1;
protected const int mediumMotor = 3;
protected const int largeMotor = 5;
protected const int largerMotor = 7;
protected const int hugeMotor = 9;
protected const int wrongMotor = 9001;
public Vehicle()
{
_horsePower = (_motorType * _motorType) * 8;
}
protected int _wheelsNumber;
public int wheelsNumber
{
get
{
return _wheelsNumber;
}
}
protected int _motorType;
public int motorType
{
get
{
if (_wheelsNumber < 4)
{
_motorType = smallMotor;
}
else if (_wheelsNumber >= 4 && wheelsNumber <= 6)
{
_motorType = mediumMotor;
}
else if (_wheelsNumber > 6 && wheelsNumber < 10)
{
_motorType = largeMotor;
}
else if (_wheelsNumber >= 10 && wheelsNumber < 18)
{
_motorType = largerMotor;
}
else if (_wheelsNumber >= 18)
{
_motorType = hugeMotor;
}
else
{
_motorType = wrongMotor;
}
return _motorType;
}
}
protected int _horsePower;
public int horsePower
{
get
{
return _horsePower;
}
}
}
}