【发布时间】:2011-10-30 15:18:54
【问题描述】:
我定义了以下接口:
public interface IAudit {
DateTime DateCreated { get; set; }
}
public interface IAuditable {
IAudit Audit { get; set; }
}
IAuditable 接口说明我将为哪些类设置Audit。 IAudit 接口是该类的实际 Audit。例如说我有以下实现:
public class User : IAuditable {
public string UserName { get; set; }
public UserAudit Audit { get; set; }
}
public class UserAudit : IAudit {
public string UserName { get; set; }
public DateTime DateCreated { get; set; }
public UserAdit(User user) {
UserName = user.UserName;
}
}
现在给定一个对象IAuditable(上面的User),我希望能够通过输入IAuditable 对象来创建IAudit(上面的UserAdit)的实例进入构造函数。理想情况下,我会有类似的东西:
if (myObject is IAuditable) {
var audit = new IAudit(myObject) { DateCreated = DateTime.UtcNow }; // This would create a UserAudit using the above example
}
但是我有很多问题:
- 您不能创建接口的实例
- 代码中没有定义哪个
IAudit适用于哪个IAuditable - 我不能指定
IAudit接口必须有一个接受IAuditable的构造函数
我确信这是许多人以前使用过的设计模式,但我无法理解它。如果有人能告诉我如何实现这一点,我将不胜感激。
【问题讨论】: