了解基本示例系统中的继承

时间:2016-01-03 05:08:10

标签: c# inheritance

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

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

    我对这种语言很陌生,但是如果有人可以向我解释这个要求想要什么,并且可能有一些关于如何开始&gt;的提示,那么它是否有可能。&lt;&#39;&#39; < / p>

    登录系统适用于客户 并且客户有VIP和非VIP

    谢谢!

1 个答案:

答案 0 :(得分:0)

所以我知道你在哪里,你甚至不明白这些词是什么意思所以你甚至无法开始。让我分解一下。在编码领域,存在一种称为面向对象编程(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类验证函数?有多种方法,但我会向您展示一种快速而肮脏的方式,只是为了让您轻松理解。顺便说一下,我在手机上输入了所有这些内容,因此下一个代码段可能无法编译:

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 
}