在基本示例系统中理解继承
本文关键字:继承 系统 | 更新日期: 2023-09-27 18:28:50
我有一个学校项目,要求我们使用WindowsForm构建登录系统,要求是
- 至少从1个父类派生一个类
- 重写基类的至少1个方法
- 从派生类调用基类的构造函数
- 演示一个方法名称的不同方法实现的方法重载
我对这门语言还很陌生,但如果有人能向我解释需求是什么,也许还能给我一些关于如何开始>的提示<''
登录系统是为客户准备的客户有VIP和非VIP
谢谢!
所以我知道你在哪里,你甚至不明白单词的意思,所以你甚至不能开始。让我把它分解一下。在编码艺术中,有一个原则叫做面向对象编程(oop)。它具有如下原则:重用、继承、多态性和抽象。
因此,父类/基类只是一个"东西",它有核心变量、子例程/空洞和函数,子类/派生类可以从中继承,也可以用自己的实现重写。一个很好(但非常非常简单)的例子展示了所有这些疯狂,这篇文章使用了形状:https://msdn.microsoft.com/en-us/library/9fkccyh4.aspx
class TestClass
{
public class Shape
{
public const double PI = Math.PI;
protected double x, y;
public Shape()
{
}
public Shape(double x, double y)
{
this.x = x;
this.y = y;
}
public virtual double Area()
{
return x * y;
}
}
public class Circle : Shape
{
public Circle(double r) : base(r, 0)
{
}
public override double Area()
{
return PI * x * x;
}
}
class Sphere : Shape
{
public Sphere(double r) : base(r, 0)
{
}
public override double Area()
{
return 4 * PI * x * x;
}
}
class Cylinder : Shape
{
public Cylinder(double r, double h) : base(r, h)
{
}
public override double Area()
{
return 2 * PI * x * x + 2 * PI * x * y;
}
}
static void Main()
{
double r = 3.0, h = 5.0;
Shape c = new Circle(r);
Shape s = new Sphere(r);
Shape l = new Cylinder(r, h);
// Display results:
Console.WriteLine("Area of Circle = {0:F2}", c.Area());
Console.WriteLine("Area of Sphere = {0:F2}", s.Area());
Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
}
}
输出:圆面积=28.27球体面积=113.10气缸面积。。。
在这里查看类"Shape"如何具有一个名为Area的函数。我们可以将其用作父类,并通过不同形状的Area函数的不同实现从中继承。显然,Shape类的Area函数适用于矩形,但您可以看到Circle类覆盖了Area函数。。这就是OOP,我们用继承和多态的抽象方式重用代码。
现在,您需要用Authenticate函数编写一个父登录类,并拥有一个名为VIPLogin的派生类,该派生类具有自己的Authenticate函数实现。
您会问,当用户单击按钮登录时,我如何运行父登录类函数而不是子VIPLogin类Authenticate函数?有多种方法,但我将向您展示一种快速而肮脏的方法,只是为了让您更容易理解。顺便说一句,我正在手机上输入所有这些,所以下一个代码片段可能无法编译:
class Login {
public bool Authenticate(string un, string pw) {
//ToDo: login using database or openid or etc
return true;
}
}
class VIPLogin : Login {
public bool Authenticate(bool isVIP, string un, string pw) {
// if it's not a VIP (like checkbox control ticked) use the generic parent class
if (!isVIP) {
return base.Authenticate(un,pw);
}
else {
//ToDo: VIP login using database or openid or etc
return true;
}
}
}
呼叫代码:
VIPLogin obj = new VIPLogin();
if ( obj.Authenticate(chkIsVip.Checked, txtUN.Text, txtPW.Text) ) {
// login was successful
}