如何访问子类中父类的某些属性(不是全部)?

时间:2019-01-31 10:07:17

标签: c# oop

我有一个Person类(父类),其中包含一些属性。假设有2个属性。我想从Person类(Parent类)(Parent类)访问Student(子类)的2个属性中的1个属性。

注意:所有属性都是公共的,我需要在其他子类中使用。

如何使用C#实现该目标? (这适用于任何面向对象的编程语言)

下面是我的示例代码。

using System;  

public class Person  
{  
   public string name; //only want this property in all child classes
   public float salary;  //don't want to access this property in Student
}

public class Student: Person  
{  
   public string subject;  
}

public class Employee: Person  
{
   public int employeeId;
}

3 个答案:

答案 0 :(得分:0)

除非所有人员都有薪水,否则您不应在“人员”中将薪水作为字段使用, 而是应该进入Employee类或使用薪水的最高类

答案 1 :(得分:0)

您的代码中存在一个概念性问题!薪资属性不够普遍,无法纳入人员类别(并非每个人都有薪水)。您不应将此属性包含在Person类中。 仅在以下情况下使用界面才有帮助:

  • 您有多个子类,其中一些有薪金
  • 您需要在不知道每个类的特定类型(例如多态性)的情况下,将具有薪水的子类作为一个组进行管理。

希望有帮助!

答案 2 :(得分:-1)

您可以使用界面来实现您的目标。它不会阻止编译器为学生对象创建Salary属性。但是,通过使用IStudent,您可以限制最终用户的访问。

public class Person
{
    public string Name { get; set; } //only want this property in all child classes
    public float Salary { get; set; } //don't want to access this property in Student
}
interface IStudent
{
    string Name { get; set; }
    string Subject { get; set; }
}

public class Employee : Person
{
    public int EmployeeId { get; set; }
}

public class Student : Person, IStudent
{
    public string Subject { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        IStudent s = new Student() { Name = "Student1", Subject = "Subject1" };
        Console.WriteLine(s.Name);
    }
}