类似实体的类

时间:2013-11-11 08:43:04

标签: c# .net class oop

我正在开发用于计算和显示表格中不同报告的软件。但表的结构没有太大差异,许多列是相同的。我首先为每个报告创建了一个类,例如:

    class Student()
    {
      int Class {get; set;}
      int Name {get; set;}
      int Age {get; set;}
    }

    class Employee()
    {
      int Name {get; set;}
      int Age {get; set;}
      int Salary{get; set;}
    }
... and more similar classes

但是在创建了一些类之后我意识到,它们中的许多都有共同的属性,我可以创建公共类:

        class HumanReport()
        {
          int Class {get; set;}//doesn't exist for Employee(null)
          int Name {get; set;}
          int Age {get; set;} 
          int Salary{get; set;}// doesn't exist for Student
        }

但在这种情况下,许多属性将包含NULL。哪种方式更适合面向对象的编程?

3 个答案:

答案 0 :(得分:5)

您应该创建一个包含公共字段的基类,然后将其扩展为专用字段

class Human
    {
      int Name {get; set;}
      int Age {get; set;} 
    }

class Employee : Human
    {
      int Salary{get; set;}
    }

class Student : Human
    {
      int Class {get; set;}
    }

这称为继承,是OOP的一个关键功能。

以下是有关继承概念的MSDN文档。

Inheritance (C# Programming Guide)

答案 1 :(得分:2)

我想说创建它使得基类具有所有类的成员。

这样的东西
class HumanReport
{
    int Name {get; set;}
    int Age {get; set;} 
}
class Student : HumanReport
{
  int Class {get; set;}
}

class Employee : HumanReport
{
  int Salary{get; set;}
}

我想你应该在这里阅读

Inheritance (C# Programming Guide)

  

继承,以及封装和多态,是其中之一   面向对象的三个主要特征(或支柱)   节目。继承使您可以创建可重用的新类,   扩展,并修改其他类中定义的行为。该   其成员被继承的类称为基类,而   继承这些成员的类称为派生类。

答案 2 :(得分:1)

将所有(或许多)报告所包含的所有属性放入一个类中:

class Person
{
    string Name {get; set;}
    int Age {get; set;}
}

然后有从这些继承的特殊类:

class Student : Person
{
    int Class {get; set;}
}

class Employee : Person
{
    int Salary {get; set;}
}

这样你就不会重复自己了。您可能希望熟悉Inheritance。它是面向对象编程的核心概念之一。