我有一个名为WageInfo
的类,它与Earning
和Deduction
类具有组成关系。所以我实现如下...
class WageInfo
{
int ID {get; set;}
Earning E = new Earning();
Deduction D = new Deduction();
}
我知道我还没有在
WageInfo
构造函数中初始化这些对象,因此无法将参数传递给Earning
和Deduction'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
可能有许多Earnings
,Deduction
和WageBalances
。所以我在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/