我定义了一个非常基本的接口,它实现了 2 个属性,标题和描述。
public interface IControl {
public string Title { get; set; }
public string Description { get; set; }
...
}
我有几个从该接口实现的用户控件,其想法当然是确保所有这些控件都必须实现并具有这些属性。
现在我需要添加一个新的属性,但它实际上只会用于少数几个,否则想法就是返回 null 或 string.Empty。
public interface IControl {
public string Title { get; set; }
public string Description { get; set; }
public string HintText { get; set; } // Should return empty if not implemented.
}
我的困境是,如果我修改界面,所有其他控件也需要修改并实现该新属性以仅返回空字符串,这并不理想,因为我不想修改它们。
我不确定接口是最好的主意,因为我可以使用一个抽象类来首先实现我的接口,然后从该抽象类继承我的控件。但是当我这样做时,我的所有控件都说它隐藏了继承的成员,并且必须声明为新的或覆盖的,这最终也意味着修改它们
public abstract class MyBaseControl: UserControl, IControl {
public string Description { get; set; };
public string Title { get; set; }
public string HintText { get; set; } = string.Empty;
}
我正在考虑的另一个选择是不使用新的属性,只需使用返回字符串的新方法,我可以在接口上默认实现它,然后完成,但它并不像拥有属性那么理想。
这些情况的最佳实践是什么,我确信我不是第一个必须修改基本界面并且不想修改所有使用它的控件的人?
还是不明白为什么接口可以有默认方法实现但不能有默认属性值?
好吧,我想我问得太早了,我找到了一种在界面上实现某种默认属性的方法,并且似乎工作得很好。
public interface IControl {
public string Title { get; set; }
public string Description { get; set; }
public string HintText { get => ""; }
}