Arbeiten mit .NET: Allgemeines: Codes/ Die Klasse Car

Aus Wikibooks


Die folgenden Seiten enthalten zum Download eine exakte Kopie des nachstehenden Codes:

Wenn Sie den Code herunterladen und speichern wollen, dann drücken Sie mit Rechtsklick auf den Link und wählen "Ziel speichern unter...".

Die Klasse Car
C#-Quelltext
using System;
using System.Drawing;

namespace Wikibooks.CSharp.Mein_neues_Auto
{
	/// <summary>
	/// Die Klasse Car beschreibt ein Auto.
	/// </summary>
	public class Car
	{
		#region Felder
		private int id;
		private Color paint;
		private string type;
		private string motortype;
		private bool isLeftSteered;
		private int numberOfSeats;
		private bool leftSignal = false;
		private bool rightSignal = false;
		private int speed = 0;
		#endregion
		
		#region Eigenschaften
		/// <summary>
		/// ID liefert die Fabrikationsnummer des Wagens.
		/// </summary>
		public int ID {
			get { return id; }
		}
		
		/// <summary>
		/// Paint ist die aktuelle Farbe der Lackierung oder legt diese fest.
		/// </summary>
		public Color Paint {
			get { return paint; }
			set { paint = value; }
		}
		
		/// <summary>
		/// Type ist der Typ des Autos (kann nur im Konstruktor festgelegt werden).
		/// </summary>
		public string Type {
			get { return type; }
		}
		
		/// <summary>
		/// Motortype ist der Typ des eingebauten Motors. Er kann nur 
		/// beim Konstruktor festgelegt oder mit SetMotortype geändert werden.
		/// </summary>
		public string Motortype {
			get { return motortype; }
		}
		
		/// <summary>
		/// IsLeftSteered = true, wenn das Lenkrad links eingebaut ist, oder
		/// = false, wenn das Lenkrad rechts eingebaut ist.
		/// Kann nur im Konstruktor festgelegt werden.
		/// </summary>
		public bool IsLeftSteered {
			get { return isLeftSteered; }
		}
		
		/// <summary>
		/// NumberOfSeats gibt die Anzahl der Sitze zurück oder legt diese fest.
		/// Es sind nur Zahlen von 1 bis 9 zulässig; der Standardwert ist 4.
		/// </summary>
		public int NumberOfSeats {
			get { return numberOfSeats; }
			set 
			{ 
				if (value >= 1 && value <= 9)
					numberOfSeats = value;
				else
					numberOfSeats = 4;
			}
		}
		
		/// <summary>
		/// Gibt die aktuelle Geschwindkeit zurück.
		/// Änderungen sind nur mit Accelerate() und Delay() möglich.
		/// </summary>
		public int Speed {
			get { return speed; }
		}
		
		#endregion

		#region Konstruktoren
		/// <summary>
		/// Der Standardkonstruktor ohne Parameter darf nicht benutzt werden.
		/// </summary>
		private Car()
		{			
		}
		
		/// <summary>
		/// Dieser Konstruktor übernimmt die wichtigsten Werte und setzt zusätzlich
		/// Standardwerte: Linkslenkung, 4 Sitze, Farbe weiß
		/// </summary>
		/// <param name="type">Typ des Autos</param>
		/// <param name="motortype">Typ des Motors</param>
		/// <param name="id">Fabrikationsnummer</param>
		public Car(string type, string motortype, int id)
		{
			this.type = type;
			this.motortype = motortype;
			this.id = id;
			this.isLeftSteered = true;
			this.paint = Color.White;
			this.NumberOfSeats = 4;
		}
		
		/// <summary>
		/// Dieser Konstruktor übernimmt sämtliche vorgesehenen Werte.
		/// </summary>
		/// <param name="type">Typ des Autos</param>
		/// <param name="motortype">Typ des Motors</param>
		/// <param name="id">Fabrikationsnummer</param>
		/// <param name="isLeft">Position des Lenkrads: true = links, false = rechts</param>
		/// <param name="numberofseats">Anzahl der Sitze</param>
		/// <param name="paint">Farbe der Lackierun</param>
		public Car(string type, string motortype, int id, bool isLeft,
		           int numberofseats, Color paint)
		{
			this.type = type;
			this.motortype = motortype;
			this.id = id;
			this.isLeftSteered = isLeft;
			this.paint = paint;
			this.NumberOfSeats = numberofseats;
		}
		#endregion

		#region Public Methoden
		/// <summary>
		/// Das Auto soll beschleunigt werden.
		/// </summary>
		/// <param name="diff">Betrag, um den die Geschwindkeit erhöht wird</param>
		public void Accelerate(int diff)
		{
			if (diff > 0)
				speedChange(diff);
		}
		
		/// <summary>
		/// Das Auto soll verzögert werden.
		/// </summary>
		/// <param name="diff">Betrag, um den die Geschwindkeit verringert wird</param>
		public void Delay(int diff)
		{
			if (diff > 0)
				speedChange(-diff);
		}
		
		/// <summary>
		/// Der linke Blinker wird betätigt.
		/// </summary>
		/// <param name="value">true = einschalten / false = ausschalten</param>
		public void SetLeftSignal(bool value)
		{
			leftSignal = value;
			rightSignal = false;
		}

		/// <summary>
		/// Der rechte Blinker wird betätigt.
		/// </summary>
		/// <param name="value">true = einschalten / false = ausschalten</param>
		public void SetRightSignal(bool value)
		{
			leftSignal = false;
			rightSignal = value;
		}
		
		/// <summary>
		/// Beide Blinker werden betätigt.
		/// </summary>
		/// <param name="value">true = einschalten / false = ausschalten</param>
		public void SetBothSignals(bool value)
		{
			leftSignal = value;
			rightSignal = value;
		}
		
		/// <summary>
		/// Der Typ des Motors wird geändert.
		/// </summary>
		/// <param name="value">Der Name des neuen Motortyps.</param>
		public void SetMotortype(string value)
		{
			if (! String.IsNullOrEmpty(value) )
				motortype = value;
		}
		#endregion
		
		#region Private Methoden
		private void speedChange(int diff)
		{
			// reagiere auf die Veränderung der Geschwindigkeit
			speed = speed + diff;
		}
		#endregion
		
		#region Aktuelle Werte anzeigen
		/// <summary>
		/// Diese Methode gibt alle wichtigen Informationen zur aktuellen Instanz zurück.
		/// </summary>
		/// <returns>Ein String mit den Informationen in zwei Zeilen</returns>
		public override string ToString()
		{
			return String.Format("Car: ID={0}, Typ={1}, Motor={2}, {3},\r\n{4} Sitze, {5}",
			                    id, type, motortype, paint, numberOfSeats,
			                    this.IsLeftSteered ? "Linkssteuerung" : "Rechtssteuerung");
		}
		
		/// <summary>
		/// Diese Methode gibt den aktuellen Status von Geschwindkeit und
		/// Blinker an der Konsole aus.
		/// </summary>
		public void ShowValues()
		{
			Console.Write("Geschwindigkeit: ");
			Console.Write(speed);
			Console.Write(" km/h - ");
			Console.WriteLine( ShowSignals() );
		}
		
		/// <summary>
		/// Diese Methode gibt den aktuellen Status des Blinkers an.
		/// </summary>
		/// <returns>Texthinweis auf Warnblinker/Links/Rechts/Aus.</returns>
		public string ShowSignals()
		{
			string result;
			if (leftSignal && rightSignal)
				result = "Warnblinker ein";
			else if (leftSignal)
				result = "Links blinken";
			else if (rightSignal)
				result = "Rechts blinken";
			else
				result = "Blinker aus";
			return result;
		}
		#endregion
		
	}
}
VB.NET-Quelltext
Imports System
Imports System.Drawing

Namespace Wikibooks.VBNet.Mein_neues_Auto
	''' <summary>
	''' Die Klasse Car beschreibt ein Auto.
	''' </summary>
	Public Class Car
		
		#Region "Felder"
		Private m_id As Integer
		Private m_paint As Color
		Private m_type As String
		Private m_motortype As String
		Private m_isLeftSteered As Boolean
		Private m_numberOfSeats As Integer
		Private leftSignal As Boolean = False
		Private rightSignal As Boolean = False
		Private m_speed As Integer = 0
		#End Region
		
		#Region "Eigenschaften"
		''' <summary>
		''' ID liefert die Fabrikationsnummer des Wagens.
		''' </summary>
		Public ReadOnly Property ID() As Integer
			Get
				Return m_id
			End Get
		End Property
		
		''' <summary>
		''' Paint ist die aktuelle Farbe der Lackierung oder legt diese fest.
		''' </summary>
		Public Property Paint() As Color
			Get
				Return m_paint
			End Get
			Set
				m_paint = value
			End Set
		End Property
		
		''' <summary>
		''' Type ist der Typ des Autos (kann nur im Konstruktor festgelegt werden).
		''' </summary>
		Public ReadOnly Property Type() As String
			Get
				Return m_type
			End Get
		End Property
		
		''' <summary>
		''' Motortype ist der Typ des eingebauten Motors. Er kann nur
		''' beim Konstruktor festgelegt oder mit SetMotortype geändert werden.
		''' </summary>
		Public ReadOnly Property Motortype() As String
			Get
				Return m_motortype
			End Get
		End Property
		
		''' <summary>
		''' IsLeftSteered = true, wenn das Lenkrad links eingebaut ist, oder
		''' = false, wenn das Lenkrad rechts eingebaut ist.
		''' Kann nur im Konstruktor festgelegt werden.
		''' </summary>
		Public ReadOnly Property IsLeftSteered() As Boolean
			Get
				Return m_isLeftSteered
			End Get
		End Property
		
		''' <summary>
		''' NumberOfSeats gibt die Anzahl der Sitze zurück oder legt diese fest.
		''' Es sind nur Zahlen von 1 bis 9 zulässig; der Standardwert ist 4.
		''' </summary>
		Public Property NumberOfSeats() As Integer
			Get
				Return m_numberOfSeats
			End Get
			Set
				If value >= 1 And value <= 9 Then
					m_numberOfSeats = value
				Else
					m_numberOfSeats = 4
				End If
			End Set
		End Property
		
		''' <summary>
		''' Gibt die aktuelle Geschwindkeit zurück.
		''' Änderungen sind nur mit Accelerate() und Delay() möglich.
		''' </summary>
		Public ReadOnly Property Speed() As Integer
			Get
				Return m_speed
			End Get
		End Property
		
		#End Region
		
		#Region "Konstruktoren"
		''' <summary>
		''' Der Standardkonstruktor ohne Parameter darf nicht benutzt werden.
		''' </summary>
		Private Sub New()
		End Sub
		
		''' <summary>
		''' Dieser Konstruktor übernimmt die wichtigsten Werte und setzt zusätzlich
		''' Standardwerte: Linkslenkung, 4 Sitze, Farbe weiß
		''' </summary>
		''' <param name="type">Typ des Autos</param>
		''' <param name="motortype">Typ des Motors</param>
		''' <param name="id">Fabrikationsnummer</param>
		Public Sub New(ByVal type As String, ByVal motortype As String, ByVal id As Integer)
			m_type = type
			m_motortype = motortype
			m_id = id
			m_isLeftSteered = True
			m_paint = Color.White
			NumberOfSeats = 4
		End Sub
		
		''' <summary>
		''' Dieser Konstruktor übernimmt sämtliche vorgesehenen Werte.
		''' </summary>
		''' <param name="type">Typ des Autos</param>
		''' <param name="motortype">Typ des Motors</param>
		''' <param name="id">Fabrikationsnummer</param>
		''' <param name="isLeft">Position des Lenkrads: true = links, false = rechts</param>
		''' <param name="numberofseats">Anzahl der Sitze</param>
		''' <param name="paint">Farbe der Lackierun</param>
		Public Sub New(ByVal type As String, ByVal motortype As String, ByVal id As Integer, _
				ByVal isLeft As Boolean, ByVal numberofseats As Integer, ByVal paint As Color)
			m_type = type
			m_motortype = motortype
			m_id = id
			m_isLeftSteered = isLeft
			m_paint = paint
			NumberOfSeats = numberofseats
		End Sub
		#End Region
		
		#Region "Public Methoden"
		''' <summary>
		''' Das Auto soll beschleunigt werden.
		''' </summary>
		''' <param name="diff">Betrag, um den die Geschwindkeit erhöht wird</param>
		Public Sub Accelerate(ByVal diff As Integer)
			If (diff > 0) Then
				speedChange(diff)
			End If
		End Sub
		
		''' <summary>
		''' Das Auto soll verzögert werden.
		''' </summary>
		''' <param name="diff">Betrag, um den die Geschwindkeit verringert wird</param>
		Public Sub Delay(ByVal diff As Integer)
			If (diff > 0) Then
				speedChange(-diff)
			End If
		End Sub
		
		''' <summary>
		''' Der linke Blinker wird betätigt.
		''' </summary>
		''' <param name="value">true = einschalten / false = ausschalten</param>
		Public Sub SetLeftSignal(ByVal value As Boolean)
			leftSignal = value
			rightSignal = False
		End Sub
		
		''' <summary>
		''' Der rechte Blinker wird betätigt.
		''' </summary>
		''' <param name="value">true = einschalten / false = ausschalten</param>
		Public Sub SetRightSignal(ByVal value As Boolean)
			leftSignal = False
			rightSignal = value
		End Sub
		
		''' <summary>
		''' Beide Blinker werden betätigt.
		''' </summary>
		''' <param name="value">true = einschalten / false = ausschalten</param>
		Public Sub SetBothSignals(ByVal value As Boolean)
			leftSignal = value
			rightSignal = value
		End Sub
		
		''' <summary>
		''' Der Typ des Motors wird geändert.
		''' </summary>
		''' <param name="value">Der Name des neuen Motortyps.</param>
		Public Sub SetMotortype(ByVal value As String)
			If Not [String].IsNullOrEmpty(value) Then
				m_motortype = value
			End If
		End Sub
		#End Region
		
		#Region "Private Methoden"
		Private Sub speedChange(ByVal diff As Integer)
			' reagiere auf die Veränderung der Geschwindigkeit
			m_speed = m_speed + diff
		End Sub
		#End Region
		
		#Region "Aktuelle Werte anzeigen"
		''' <summary>
		''' Diese Methode gibt alle wichtigen Informationen zur aktuellen Instanz zurück.
		''' </summary>
		''' <returns>Ein String mit den Informationen in zwei Zeilen</returns>
		Public Overloads Overrides Function ToString() As String
			Return String.Format("Car: ID={0}, Typ={1}, Motor={2}, {3}," _
				& Environment.NewLine & "{4} Sitze, {5}", _
				m_id, m_type, m_motortype, m_paint, m_numberOfSeats, _
				IIf(Me.IsLeftSteered,"Linkssteuerung","Rechtssteuerung"))
		End Function
		
		''' <summary>
		''' Diese Methode gibt den aktuellen Status von Geschwindkeit und
		''' Blinker an der Konsole aus.
		''' </summary>
		Public Sub ShowValues()
			Console.Write("Geschwindigkeit: ")
			Console.Write(m_speed)
			Console.Write(" km/h - ")
			Console.WriteLine(ShowSignals())
		End Sub
		
		''' <summary>
		''' Diese Methode gibt den aktuellen Status des Blinkers an.
		''' </summary>
		''' <returns>Texthinweis auf Warnblinker/Links/Rechts/Aus.</returns>
		Public Function ShowSignals() As String
			Dim result As String
			If leftSignal And rightSignal Then
				result = "Warnblinker ein"
			ElseIf leftSignal Then
				result = "Links blinken"
			ElseIf rightSignal Then
				result = "Rechts blinken"
			Else
				result = "Blinker aus"
			End If
			Return result
		End Function
		#End Region
		
	End Class
End Namespace