在基本示例系统中理解继承

本文关键字:继承 系统 | 更新日期: 2023-09-27 18:28:50

我有一个学校项目,要求我们使用WindowsForm构建登录系统,要求是

  1. 至少从1个父类派生一个类
  2. 重写基类的至少1个方法
  3. 从派生类调用基类的构造函数
  4. 演示一个方法名称的不同方法实现的方法重载

我对这门语言还很陌生,但如果有人能向我解释需求是什么,也许还能给我一些关于如何开始>的提示<''

登录系统是为客户准备的客户有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 
}