我有一个名为WageInfo的类,它与EarningDeduction类具有组成关系。所以我实现如下...

class WageInfo
{
    int ID {get; set;}
    Earning E = new Earning();
    Deduction D = new Deduction();

}


我知道我还没有在WageInfo构造函数中初始化这些对象,因此无法将参数传递给EarningDeduction's构造函数。

除此之外,可以将其视为组成部分吗?这种方法还有其他缺陷吗?

编辑:

有关课程的更多详细信息

class Earning
{
int ID {get; set;}
Decimal Amount {get; set;}
DateTime Period {get; set;}

}

class Deduction
{
int ID {get; set;}
Decimal Amount {get; set;}
DateTime Period {get; set;}
String Remarks {get; set;}
}


我访问这些属性如下...

在Program.cs中

WageInfo WI= new WageInfo();
WI.E.Amount= 1000;


编辑2:

我的班级关系就是这样...



WageInfo可能有许多EarningsDeductionWageBalances。所以我在PrepareEarnings()类中的WageManager如下...

 public List<Earning> PrepareEarnings(DateTime wagePeriodStartDate, DateTime wagePeriodEndDate)
        {
            return GetEarningsToList(wagePeriodStartDate,wagePeriodEndDate);
        }


        public List<Earning> GetEarningsToList(DateTime startDate, DateTime endDate)
        {
            return CalculateEarnings(startDate,endDate).Rows.OfType<DataRow>().Select(CreateEarnings).ToList();
        }

        private DataTable CalculateEarnings(DateTime startDate, DateTime endDate)
        {
            return _DataService.GetEarnings(startDate,endDate);
        }

        private Earning CreateEarnings(DataRow row)
        {
            WageInfo wageInfo = new WageInfo();

            wageInfo.Earning.EmployeeID = row[0] == DBNull.Value ? 0 : Convert.ToInt32(row[0]);
            wageInfo.Earning.WorkDays = row[2] == DBNull.Value ? 0 : Convert.ToInt32(row[2]);

            //

            return wageInfo.Earning;
        }

最佳答案

当包含对象(此处为WageInfo)完全控制所包含对象(E,D)的生命周期时,关联即为组合。

E和D是在WageInfo中确定创建的,因此可以进行合成。我想它们也将从WageInfo中删除,因此可以说这种关系是复合的。

此外,它们不应从包含对象(私有数据成员)的外部直接可见。

编辑部分的注释:

您应该将E和D设为私人成员,以使构图更整洁。至少吸气剂能胜任。这不是强制性的,但是生命周期控制至关重要。

关于c# - 类组成作为实例变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23783945/

10-09 08:26