1

我正在开发计算并在表格中显示不同报告的软件。但是表的结构并没有太大的区别,很多列都是一样的。首先,我为每个报告创建了一个类,例如:

    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。哪种方式更适合面向对象的编程?

4

3 回答 3

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 文档。

继承(C# 编程指南)

于 2013-11-11T08:46:04.987 回答
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;}
}

我认为你应该在这里阅读

继承(C# 编程指南)

继承与封装和多态一起是面向对象编程的三个主要特征(或支柱)之一。继承使您能够创建新的类来重用、扩展和修改在其他类中定义的行为。其成员被继承的类称为基类,继承这些成员的类称为派生类。

于 2013-11-11T08:46:56.923 回答
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。它是面向对象编程的核心概念之一。

于 2013-11-11T08:46:57.980 回答