我正在构建自己的基本用户界面类。在他们身上,我希望他们都有类似的“共同”属性和方法。我可以定义一个接口类,但是接口似乎只允许抽象方法,而不是属性。
我不想将完全相同的代码复制到每个类,但不确定如何实现...例如:我希望这些常见的东西适用于Buttons,Textbox,Checkbox,Listbox等用户控件
建议???
答案 0 :(得分:1)
在这种情况下,我通常使用抽象类。创建基本抽象类,然后从新控件继承它。
答案 1 :(得分:0)
您可以在界面上定义属性:interface properties
public interface ISampleInterface
{
// Property declaration:
string Name
{
get;
set;
}
}
答案 2 :(得分:0)
您可以在界面中声明属性,如下所示:
public interface IMyInterface
{
string Name { get; set; }
int Age { get; set; }
}
然而,在这种情况下,听起来抽象类会更好。
答案 3 :(得分:0)
绝对可以在接口上指定属性
interface IFoo {
string Name { get; set; }
string Age { get; } // Read Only
}
但是否则你是对的。接口不指定任何行为,因此只能定义“抽象”方法和属性。必须在每个实现者上完成实现。这是为接口的灵活性付出的代价。
如果所有子类之间的行为完全相同,那么我通常会选择一个抽象类。或者经常是一个组合。即定义一个接口和一个实现该接口的基本实现。
class Foo : IFoo {
private string _name;
public Name { get { return _name; } set { _name = value; } }
public Age { get { return 42; } }
}
这使您可以灵活地快速实现,并且可以选择使用由于某种原因无法从Foo派生的类的接口。
答案 4 :(得分:0)
.Net不允许多重继承,但您可以使用“继承层次结构”来组织基类。这就是.Net本身的布局。
答案 5 :(得分:0)
我自己来自C ++ - 允许多重继承和可扩展使用的背景,所以我经常遇到和你一样的问题。 你需要做的第一件事就是阅读混合内容 - 在这里你会发现你一直在使用它们,而不是命名它们。 第二步是在你需要的时候开始识别你的mixin,你经常会发现你也可以通过合成来使用它们。 第三步是使用组合实现它们......是的,我也讨厌这个,但如果你想去.NET(或Java或......),就没有办法解决它:)
你应该使用的继承权不适用于你的mixins,而是适用于实际识别你的物品的东西。我建议查看一些常用控件(文本框等)的.NET层次结构,以获得一些灵感。
祝你好运