Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# - Fatal编程技术网

C# 如何访问基类的部分成员

C# 如何访问基类的部分成员,c#,C#,我有一个基础班 class Administrator() { void addEmployee(){ some code }; void Salary_PaySlip() { some code }; } class HR: Administrator { // make use of addEmployee() } class Accountant: Administrator {

我有一个基础班

class Administrator()
    {
         void addEmployee(){ some code };
         void Salary_PaySlip() { some code }; 
    }
class HR: Administrator
    {
            // make use of addEmployee()
    }
class Accountant: Administrator
    {
            // make use of void Salary_PaySlip()
    }
这只是一个例子

这里我只想
会计
使用
工资单()方法
。会计人员不应访问方法
addEmployee()
。同样的
class HR
应该只能访问
addEmployee()
方法

有人能帮我解决这个问题吗


提前感谢

您的问题可以概括为单一责任原则,这与接口隔离原则非常相关(我建议您检查面向对象设计的坚实原则:)

您创建了一个可以同时添加员工和工资单的类管理员。但是,您希望将有权使用您的类的某些部分的人隔离开来。这是该类应分为两个不同类的标志。每种方法一个

然后,您将能够创建“客户机”类(使用这些方法的类)。我建议您最终使用组合而不是继承来访问管理员部分,因为不确定使用此继承链接是否有意义

示例代码当然还不相关(但如果没有更多信息就做不到更好)


您的问题可以概括为单一责任原则,这与接口隔离原则有很大关系(我建议您检查面向对象设计的坚实原则:)

您创建了一个可以同时添加员工和工资单的类管理员。但是,您希望将有权使用您的类的某些部分的人隔离开来。这是该类应分为两个不同类的标志。每种方法一个

然后,您将能够创建“客户机”类(使用这些方法的类)。我建议您最终使用组合而不是继承来访问管理员部分,因为不确定使用此继承链接是否有意义

示例代码当然还不相关(但如果没有更多信息就做不到更好)


var c=新管理员();这不是在喊“不要使用继承”吗?还是我遗漏了什么?人力资源部和会计部通过管理员共享什么?为什么不将这两个方法移到各自的派生类中如果继承是必要的。我不明白!嗨,马修。使用继承是个问题。我找到了答案。感谢回复var c=新管理员();这不是在喊“不要使用继承”吗?还是我遗漏了什么?人力资源部和会计部通过管理员共享什么?为什么不将这两个方法移到各自的派生类中如果继承是必要的。我不明白!嗨,马修。使用继承是个问题。我找到了答案。谢谢你的回答,谢谢。这个概念似乎更简单。再次感谢联络员谢谢。这个概念似乎更简单。再次感谢你的链接
public class EmployeeAdministrator()
{
    public void addEmployee(){ some code };
}

public class SalaryAdministrator()
{
    public void Salary_PaySlip() { some code };
}

public class HR 
{
    public EmployeeAdministrator Administrator { get; }
    // make use of addEmployee()
}

class Accountant
{
    public SalaryAdministrator Administrator { get; }
    // make use of void Salary_PaySlip()
}