分配给不同子类类型的公共属性和方法

时间:2009-03-23 13:21:15

标签: c# multiple-inheritance

我正在构建自己的基本用户界面类。在他们身上,我希望他们都有类似的“共同”属性和方法。我可以定义一个接口类,但是接口似乎只允许抽象方法,而不是属性。

我不想将完全相同的代码复制到每个类,但不确定如何实现...例如:我希望这些常见的东西适用于Buttons,Textbox,Checkbox,Listbox等用户控件

建议???

6 个答案:

答案 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层次结构,以获得一些灵感。

祝你好运