我有以下一組接口和類。混淆與多接口實現
public interface IValidatableObject
{
List<string> ValidationErrors { get; }
bool Validate();
}
public class ValidatableObject : IValidatableObject
{
public List<string>ValidationErrors { get; }
public bool Validate()
{
//dostuff
}
}
public interface IDeviceDataObject
{
int Id { get; set; }
string Name { get; set; }
}
public class DeviceDataObject : ValidatableObject, IDeviceDataObject
{
public int Id { get; set; }
public string Name { get; set; }
}
public class DeviceService
{
public bool ValidateDevice(IDeviceDataObject device)
{
return device.Validate(); // This throws a compiler error
}
}
在上面的服務操作ValidateDevice的問題是,編譯器不能解析device.Validate(),因爲IDeviceDataObject沒有實現IValidatableObject接口。
我的問題是,是否正確更改IValidatableObject
以實施IValidatableObject
。我有點不確定這是否是好的做法,因爲我看到它的方式,DeviceDataObject
實施IValidatableObject
兩次 - 一次通過ValidatableObject
,一次通過IDeviceDataObject
。任何人都可以幫我解決這個問題嗎?
public interface IDeviceDataObject : IValidatableObject
{
int Id { get; set; }
string Name { get; set; }
}
爲什麼你的ValidateDevice簽名看起來像「public bool ValidateDevice(IValidatableObject someobj)'?不是什麼表達驗證方法的功能:它需要一些可驗證的功能。其他一切都可以保持原樣。 –
公平的電話。但是如果它是一個CreateDevice方法需要知道它是一個傳入的IDeviceDataObject,但它仍然需要具有IValidatableObject功能呢? – Chris
因此 - 因爲我不知道這裏的大圖 - 所有的IDeviceDataObjects應該可驗證嗎?如果是,則讓''IDeviceDataObject''從''IValidatableObject''繼承。如果沒有,那麼這是無法解決的。它有時真的很簡單:它只是一個在語義上有意義的問題。然後將它翻譯成代碼是一個相當簡單的步驟。 –