Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 父类或基类中的方法和字段_C#_Oop - Fatal编程技术网

C# 父类或基类中的方法和字段

C# 父类或基类中的方法和字段,c#,oop,C#,Oop,我有一个Employee基类和一个FullTimeEmp和一个PartTimeEmp派生类。我希望能够使用方法获取员工的类型。我计划在FullTimeEmp和PartTimeEmp类的构造函数中设置EmployeeType 我应该将GetEmployeeType方法和字段employeeType放在基类还是派生类中?所有员工都必须具有employeeType,并且能够返回employeeType,但该值是在派生类中设置的 编辑:我知道如何对这两个备选方案进行编码,但从面向对象的角度来看,我不知道

我有一个
Employee
基类和一个
FullTimeEmp
和一个
PartTimeEmp
派生类。我希望能够使用方法获取员工的类型。我计划在
FullTimeEmp
PartTimeEmp
类的构造函数中设置
EmployeeType

我应该将
GetEmployeeType
方法和字段
employeeType
放在基类还是派生类中?所有员工都必须具有employeeType,并且能够返回employeeType,但该值是在派生类中设置的

编辑:我知道如何对这两个备选方案进行编码,但从面向对象的角度来看,我不知道哪一个是正确的备选方案。我不认为这是一个意见问题。我认为有一种正确的编码方式和一种错误的编码方式。

类似的:

public abstract class Employee
{
    public abstract string Type { get; }
}

public class FullTimeEmployee : Employee
{
    public override string Type { get; } = "Full Time";
}

要查看
员工的类型
,可以在实例中使用
对象。GetType()
函数,它将返回一个
类型
对象。 范例

你可以在网站上查看更多信息

编辑:

由于两个父类都需要employeeType,因此可以在基类上设置字段employeeType和方法GetEmployeeType,并在父类构造函数上设置字段的值


或者像Evgeni所说的那样,您也可以将基类抽象化,放入抽象get属性,每个父类实现该属性的各自版本。

如果我了解您的需求,这是一个可能的解决方案:

public class Employee
{
    public Type EmployeeType { get { return GetType(); } }
}

public class FullTimeEmp : Employee { }
public class Employee
{
    public virtual string EmployeeType { get { return "Employee"; } }
}

public class FullTimeEmp : Employee { 
    public override string EmployeeType { get { return "FullTimeEmp"; } }
}
在这种情况下,不需要在派生类中设置
类型
。如果您想以字符串形式返回其他内容,这是另一种解决方案:

public class Employee
{
    public Type EmployeeType { get { return GetType(); } }
}

public class FullTimeEmp : Employee { }
public class Employee
{
    public virtual string EmployeeType { get { return "Employee"; } }
}

public class FullTimeEmp : Employee { 
    public override string EmployeeType { get { return "FullTimeEmp"; } }
}
并使用抽象基类:

public abstract class Employee
{
    public abstract string EmployeeType { get; }
}

public class FullTimeEmp : Employee { 
    public override string EmployeeType { get { return "FullTimeEmp"; } }
}

我希望这能回答您的问题。

我永远不会将该属性命名为
类型
…这是我在30秒内编写的示例代码。。您可以随意命名它。EmployeeType函数应该返回什么?一根绳子?枚举?你能举一个值的例子吗?除非它们有不同的逻辑,为什么不使用一个名为
EmployedFullTime
bool
属性呢?这可能是真的(全职工作)也可能是假的(兼职工作)。Bools通常是一个糟糕的选择,除非你绝对确定你永远不会有超过2个值。如果他决定添加一个承包商类型,他将不得不进行许多容易避免的重构。我会坚持使用枚举或字符串。@Evgeni如果承包商是兼职呢?不知道。问巴。也许你会需要另一种类型,也许你会有一个PTContractor类型。这并没有回答被问到的问题。