第一部分OOP原则
Classes
:
类是一种构造,它使您能够创建自己的自定义
通过将其他类型、方法和
事件。一堂课就像一张蓝图。它定义了数据和行为
类型。如果类未声明为静态,则客户端代码可以使用
它通过创建分配给变量的对象或实例来实现。
该变量保留在内存中,直到对它的所有引用都用完
范围此时,CLR将其标记为符合垃圾处理条件
收集如果类声明为静态,则只有一个副本
存在于内存中,客户端代码只能通过类访问它
而不是实例变量。有关详细信息,请参见静态
类和静态类成员(C#编程指南)。不像
结构,类支持继承,这是
面向对象编程。有关详细信息,请参见继承(C#
编程指南)。
对象也是类的实例。
Inheritance
:
继承以及封装和多态性是
面向对象的三个主要特征(或支柱)
编程。继承使您能够创建新的类,
扩展和修改在其他类中定义的行为。这个
成员被继承的类称为基类
继承这些成员的类称为派生类。A.
派生类只能有一个直接基类。然而
继承是可传递的。如果ClassC派生自ClassB,并且
ClassB派生自ClassA,ClassC继承
B类和A类。
派生类:
基于先前存在的类(即基类)创建的类。派生类继承派生类的基类的所有成员变量和方法。
也称为派生类型。
Method
:
面向对象编程(OOP)中的方法(或消息)是
与对象类关联的过程。一个物体由
行为和数据。数据表示为对象的属性
行为作为方法。方法也是对象呈现的接口
向外界开放。例如,窗口对象将具有方法
例如打开和关闭。最重要的功能之一是
方法提供的是方法重写。相同的名称(例如,区域)可以
可用于多种不同类型的类。这允许
发送对象以调用行为和委托实现
将这些行为发送给接收对象。例如,对象可以
向另一个对象发送区域消息和适当的公式
将调用接收对象是否是矩形、圆形或矩形,
三角形等。
Attributes and properties
:
“字段”、“类变量”和“属性”或多或少是
相同-连接到对象的低级存储槽。每种语言的
文档可能始终使用不同的术语,但最实际的
程序员可以互换使用它们。(然而,这也意味着
其中的一个术语可能是不明确的,比如“类变量”
解释为“给定类实例的变量”,或“
类对象本身的变量”
是你可以直接操纵的东西。)
在我使用的大多数语言中,“属性”完全是另一回事-
它们是将自定义行为附加到读/写字段的一种方式。
(或更换。)
因此,如果你想对它们进行分类,它们就是OOP(面向对象编程)原则。
第二部分:
编写名为Fleet的控制台应用程序。创建和显示的cs
每种车型2辆。
这样做的一种方法是将车辆创建为硬编码。另一种方法是使用
Console.Readline()
.
Main
方法可能看起来像这样。
static void Main(string[] args)
{
Vehicle v1 = new Vehicle { Make = "test1", Model = "model1", Year = 1996 };
Vehicle v2 = new Vehicle { Make = "test2", Model = "model2", Year = 1997 };
Console.WriteLine(v1);
Console.WriteLine(v2);
...
}
然后你将覆盖
ToString()
方法。这样地:
public override string ToString()
{
return string.Format("Vehicle is {0} and of model {1} and is made in {2}.", make, model, year);
}
在这里,您也可以使用
base.ToString()
以获取派生类中上层(基础)类的数据。
编辑1:用户输入:
所以,如果你想要用户输入,你可以制作这样的程序:
static void Main(string[] args)
{
//input
Vehicle v1 = new Vehicle();
Console.Write("Enter the make of 1st vehicle: ");
v1.Make = Console.ReadLine();
Console.Write("Enter the model of 1st vehicle: ");
v1.Model = Console.ReadLine();
Console.WriteLine("Enter the year of manufacturing for 1st vehicle:");
v1.Year = int.Parse(Console.ReadLine());
//output
Console.WriteLine("The data for 1st vehicle: ");
Console.WriteLine(v1);
...
}
更好的办法是创造
Input
方法,并从
主要的
程序所以代码不会重复。
已完成的程序
车辆.cs
using System;
class Vehicle
{
string make, model;
int year;
public string Make { get { return make; } set { make = value; } }
public string Model { get { return model; } set { model = value; } }
public int Year { get { return year; } set { year = value; } }
public Vehicle()
{
make = model = "Unknown";
year = 0;
}
public Vehicle(string make, string model, int year)
{
this.make = make;
this.model = model;
this.year = year;
}
public virtual void GetFromInput()
{
Console.Write("Enter the make of vehicle: ");
Make = Console.ReadLine();
Console.Write("Enter the model of vehicle: ");
Model = Console.ReadLine();
Console.WriteLine("Enter the year of manufacturing for vehicle: ");
Year = int.Parse(Console.ReadLine());
}
public override string ToString()
{
return string.Format("Vehicle is {0} and of model {1} and is made in {2}.", make, model, year);
}
}
车载电脑
using System;
class Car : Vehicle
{
string bodyType;
public string BodyType { get { return bodyType; } set { bodyType = value; } }
public Car() : base()
{
bodyType = "Unknown";
}
public Car(string make, string model, int year, string bodyType) : base(make, model, year)
{
this.bodyType = bodyType;
}
public override void GetFromInput()
{
base.GetFromInput();
Console.Write("Enter body type for the car: ");
BodyType = Console.ReadLine();
}
public override string ToString()
{
return base.ToString() + string.Format("This vehicle is a car with body type of {0}.", BodyType);
}
}
飞机.cs
using System;
class Airplane : Vehicle
{
int noEngines;
string engineType;
public int NumberOfEngines{ get { return noEngines; } set { noEngines = value; } }
public string EngineType { get { return engineType; } set { engineType = value; } }
public Airplane() : base()
{
noEngines = 0;
engineType = "Unknown";
}
public Airplane(string make, string model, int year, int noEngines, string engineType) : base(make, model, year)
{
this.noEngines = noEngines;
this.engineType = engineType;
}
public override void GetFromInput()
{
base.GetFromInput();
Console.Write("Enter the number of engines on an airplane: ");
NumberOfEngines = int.Parse(Console.ReadLine());
Console.Write("Enter the engine type for the airplane: ");
EngineType = Console.ReadLine();
}
public override string ToString()
{
return base.ToString() + string.Format("This vehicle is an airplane with {0} engines and engine type of {1}.", NumberOfEngines, EngineType);
}
}
Boat.cs公司
using System;
class Boat : Vehicle
{
int length;
string hullType;
public int Length { get { return length; } set { length = value; } }
public string HullType { get { return hullType; } set { hullType = value; } }
public Boat() : base()
{
length = 0;
hullType = "Unknown";
}
public Boat(string make, string model, int year, int length, string hullType) : base(make, model, year)
{
this.length = length;
this.hullType = hullType;
}
public override void GetFromInput()
{
base.GetFromInput();
Console.Write("Enter the length of the boat: ");
Length = int.Parse(Console.ReadLine());
Console.Write("Enter the hull type for the boat: ");
HullType = Console.ReadLine();
}
public override string ToString()
{
return base.ToString() + string.Format("This vehicle is a boat with length of {0} and hull type of {1}.", Length, HullType);
}
}
Fleet.cs公司
using System;
class Fleet
{
static void Main(string[] args)
{
Vehicle v1 = new Vehicle();
v1.GetFromInput();
Console.WriteLine(v1);
//... for the other vehicles
}
}