0

我正在构建自己的基本用户界面类。在它们上,我希望它们都具有相似的“通用”属性和方法。我可以定义一个接口类,但接口似乎只允许抽象方法,没有属性。

我不想将完全相同的代码复制到每个类,但不知道如何实现... 例如:我希望这些常见的东西适用于按钮、文本框、复选框、列表框等用户控件。

建议???

4

6 回答 6

1

在这种情况下,我通常使用抽象类。创建您的基本抽象类,然后从您的新控件继承它。

于 2009-03-23T13:24:41.780 回答
0

您可以在接口上定义属性:接口属性

public interface ISampleInterface
{
    // Property declaration:
    string Name
    {
        get;
        set;
    }
}
于 2009-03-23T13:25:08.863 回答
0

您可以在接口中声明一个属性,如下所示:

public interface IMyInterface
{
   string Name { get; set; }
   int Age { get; set; }
}

但是,在这种情况下,听起来抽象类会更好。

于 2009-03-23T13:26:21.713 回答
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 派生的类的快速实现。

于 2009-03-23T13:26:36.923 回答
0

.Net 不允许多重继承,但您可以使用“继承层次结构”来组织您的基类。这就是 .Net 本身的布局方式。

于 2009-03-23T13:27:09.637 回答
0

我自己来自 C++ 背景,允许和可扩展地使用多继承,所以我经常遇到和你一样的问题。您需要做的第一件事是阅读混音 - 在这里您会发现自己一直在使用它们,而从未命名它们。第二步是在你需要的时候开始识别你的mixin,你会经常发现你还不如通过组合来使用它们。第三步是使用组合来实现它们......是的,我也讨厌这个,但如果你想去 .NET(或 Java 或......),就没有办法了:)

你应该使用继承的不是你的混入,而是真正识别你的项目的东西。我建议查看一些常用控件(文本框等)的 .NET 层次结构以获得一些灵感。

祝你好运

于 2009-03-23T13:32:34.930 回答