Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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语言中实现带继承的类组合#_C#_Uml_Composition - Fatal编程技术网

C# 如何在C语言中实现带继承的类组合#

C# 如何在C语言中实现带继承的类组合#,c#,uml,composition,C#,Uml,Composition,我是面向对象开发的新手,非常感谢您在这方面的帮助。 在我的工资系统中,我有四个类,分别是“支付”、“工资”、“收入”和“扣除”。 准备工资需要多种类型的收入(如加班费、奖励、空间津贴、加班费、预算津贴、结转金额等)和扣减(如保险、制服、贷款、回收、福利、膳食、预付工资等) 所以我把它分为两类,即“收入”和“扣除”。最后,“工资”类负责平衡部分,“付款”类负责支付部分(银行业务)。另一种支付方式是预付工资,这只是每月支付的一笔款项。建立的关系如下所示… “收入”和“扣除”类与“工资”有组成关系,“

我是面向对象开发的新手,非常感谢您在这方面的帮助。 在我的工资系统中,我有四个类,分别是“支付”、“工资”、“收入”和“扣除”。 准备工资需要多种类型的收入(如加班费、奖励、空间津贴、加班费、预算津贴、结转金额等)和扣减(如保险、制服、贷款、回收、福利、膳食、预付工资等) 所以我把它分为两类,即“收入”和“扣除”。最后,“工资”类负责平衡部分,“付款”类负责支付部分(银行业务)。另一种支付方式是预付工资,这只是每月支付的一笔款项。建立的关系如下所示… “收入”和“扣除”类与“工资”有组成关系,“工资”是从“付款”派生的类。我在我的C代码中实现了这些关系,如下所示… 我的问题是

1.我是否以适当的方式完成了相关课程

2.关系的实施是否正确

付款

   class payment
    {
        public virtual void pay()
        {

        }
}
工资

class salary:payment
{
//Composition of ‘Earning’ class
    private earning E1;

    public salary()
    {
        E1 = new earning(this);

    }
//Calling calEarning() of ‘Earning’ class through ‘Salary’ class
    public void calEarningForSal()
    {
        E1.calEarning();
    }

//Implementing pay method of base class 
    public override void pay()
    {

    }
}

收入

  public class earning
    {
    //Since earning has a composition relationship with salary…
        private salary S1;

        internal earning(salary sal)
        {
            this.S1 = sal;
        }
    //This method will calculate earnings of employees
        public void calEarning()
        {

        }
    }
主要方法

Main()
        {
            salary newSal = new salary();
            newSal.calEarningForSal();
        }

当试图确定是使用组合还是聚合时,要问的简单问题是

  • A属于B吗
  • A用B吗
在你的情况下,你说

“收入”和“扣除”类与“工资”有组成关系

因此,用外行的话说,你所说的是
收入
/
扣减
属于
工资
,换句话说,
工资
收入
/
扣减
(以及其他许多组成部分)组成。话虽如此,我还是希望你的
薪水
班看起来像

public class Salary
{
    private Earning e;
    private Deduction d;

    public Salary()
    {
        this.e = new Earning();
        this.d = new Deduction();
    }

    public void override Pay()
    {
        ... 
    }
}
收入
/
扣减
不应该知道
工资
,这些类实际上是构成
工资的组成部分。例如,您的
课程可能看起来像

public class Earning
{
    public Earning()
    {
    }

    public void Calculate()
    {
        ...
    }
}
如果
收入
/
扣减
需要
工资
中的信息,则您可以向下传递此信息,但是,您不应传递对
工资
本身的引用,因为这将打破组合关系(并实际上引入
收入
/
工资
之间的聚合)


在继承方面,如果基类
Payment
只提供了一个简单的
Pay
方法,那么我建议使用一个接口,例如

public interface IPayable
{
    void Pay();
}

public class Salary : IPayable
{
    ...
}

当试图确定是使用组合还是聚合时,要问的简单问题是

  • A属于B吗
  • A用B吗
在你的情况下,你说

“收入”和“扣除”类与“工资”有组成关系

因此,用外行的话说,你所说的是
收入
/
扣减
属于
工资
,换句话说,
工资
收入
/
扣减
(以及其他许多组成部分)组成。话虽如此,我还是希望你的
薪水
班看起来像

public class Salary
{
    private Earning e;
    private Deduction d;

    public Salary()
    {
        this.e = new Earning();
        this.d = new Deduction();
    }

    public void override Pay()
    {
        ... 
    }
}
收入
/
扣减
不应该知道
工资
,这些类实际上是构成
工资的组成部分。例如,您的
课程可能看起来像

public class Earning
{
    public Earning()
    {
    }

    public void Calculate()
    {
        ...
    }
}
如果
收入
/
扣减
需要
工资
中的信息,则您可以向下传递此信息,但是,您不应传递对
工资
本身的引用,因为这将打破组合关系(并实际上引入
收入
/
工资
之间的聚合)


在继承方面,如果基类
Payment
只提供了一个简单的
Pay
方法,那么我建议使用一个接口,例如

public interface IPayable
{
    void Pay();
}

public class Salary : IPayable
{
    ...
}

这取决于你想要什么。像往常一样。在这里,我没有得到“收入”和“扣除”的预期角色。但是工资是一种支付,听起来很可疑。如果工资分两部分支付怎么办?我同意@Henkholtman的观点,我开始回答这个问题,然后意识到
工资和
收入之间的模糊性-你需要澄清每个班级的角色。@Henk Holterman,实际上,在这种情况下,准备工资需要多种类型的收入(如加班费、奖励、空间津贴、加班费、预算津贴、结转金额等)和扣除额(如保险、制服、贷款、回收、福利、膳食、预付工资等)因此,我将其分为两类,即“收入”和“扣除”。最后,“工资”类负责平衡部分,“付款”类负责支付部分(银行业务)。另一种支付方式是预付工资,这只是每月支付的金额。谢谢!这取决于你想要什么。像往常一样。我在这里不理解“收入”和“扣除”的预期作用。但是工资是一种支付方式,听起来很可疑。如果工资分两部分支付呢?我同意@HenkHolterman,我开始回答这个问题,然后意识到了模糊性在
工资
收入
之间-你需要澄清每个班级的角色。@Henk Holterman,实际上在这种情况下,准备工资需要多种类型的收入(如加班费、奖励、空间津贴、加班费、预算津贴、结转金额等)和扣除额(如保险、制服、贷款、追偿、福利、膳食、预付工资等)因此我将其分为两类,即“收入”和“扣除”。最后,“工资”类负责平衡部分,“付款”类负责支付部分(银行)。其他类型的付款是sal