5

我不知道这叫什么,所以我一直在努力从谷歌那里找到答案,但我对过去的记忆模糊不清。

我已经对大约 8 个框架控件进行了分类(* 见下文),覆盖了一些属性并为每个控件添加了一些功能。我所做的更改在每种情况下都是相同的。如果我进行更改,我必须通过每个班级并在那里应用相同的更改。我希望可能有一个关键字,例如<IncludeSourcefile "common.vb>可以放入每个类中。

任何机会?

(* 注意)我使用术语 sub-classed 但我不知道这是否是正确的术语。我还看到它用于回调。子分类是正确使用的术语吗?

4

5 回答 5

1

我严重怀疑这对你有用。您不能使用包含文件将更改卡在派生控件中。您通常会在公共基类中进行更改,例如从 Control 派生的基类,然后从该基类派生单独的控件。但是,如果您自定义了 8 个单独的控件类,这将不起作用。复制和粘贴是你的事。

于 2010-01-26T00:17:43.717 回答
1

这可能是一个疯狂的想法,但......

  1. 使用您需要的代码创建一个 common.vb 文件。
  2. 为您将添加示例代码的每个控件创建部分类文件。
  3. 创建一个批处理文件,将数据从 common.vb 复制到部分类中
  4. 创建一个执行该批处理文件的预构建步骤。

如果您需要在编译之前将代码复制到部分类中,您可以随时运行批处理文件。

这当然是假设 VB.NET 有部分类的概念。不,我没有在家里尝试过...... ;-D

于 2010-01-26T00:32:48.587 回答
1

我记得在某处读到微软做出了一个特定的设计决定(至少在 C# 中)不允许以这种方式包含外部源代码。

人们认为,虽然在 C++ 中包含源文件可能很有用,但它也可能会引入复杂性并降低可读性。

在 OO 语言中,通常有很好的替代方案,最明显的是对象组合和委托。

以下是我过去处理这种情况的方式:

class CommonCode
{
    public void HandlePaint(Control c, PaintEventArgs a)
    {
        // Do shared code
    }
    public void HandleResize(Control c)
    {
        // Do shared code
    }

}

class MyButton : Button
{
    private CommonCode m_common=null;

    public MyButton()
    {
        m_common=new CommnCode();        
    }
    protected override OnPaint(PaintEventArgs a)
    {
        m_common.HandlePaint(this,a);
    }

    protected override void OnResize(EventArgs e)
    {
        m_common.HandleResize(this);
    }

}

class MyTextbox :Textbox
{

    private CommonCode m_common=null;

    public MyTextbox()
    {
        m_common=new CommnCode();        
    }
    protected override OnPaint(PaintEventArgs a)
    {
        m_common.HandlePaint(this,a);
    }

    protected override void OnResize(EventArgs e)
    {
        m_common.HandleResize(this);
    }

}
于 2010-01-26T03:12:56.127 回答
0

将您的公共类编译成它们自己的 DLL。

然后在解决方案资源管理器中右键单击“引用”文件夹,在 Visual Studio 中为您的 DLL 设置引用。

最后,将 Using 语句添加到新 DLL 中命名空间的项目类中。

于 2010-01-26T00:16:36.620 回答
0

您可以从 Visual Studio 创建一个类库项目(其输出将是一个 dll):

新建项目 --> 类库

您可以将所有代码放在那里,然后您可以简单地将类库的引用添加到您要从中使用它的项目中(右键单击解决方案资源管理器上的引用):

参考 --> 添加参考 --> 项目 --> MyClassLibrary

为了能够在项目选项卡中找到 MyClassLibrary,两个项目都需要在同一个解决方案中 - 否则你可以去“浏览”并指向 dll 本身。

然后在 .vb 文件中,您需要使用您的类,您可以导入 MyClassLibrary:

// assuming the namespace is MyClassLibrary
imports MyClassLibrary

此时您可以只使用您的子类和控件。如果你去MyClassLibrary.智能感知会告诉你你所有的课程。

于 2010-01-26T00:18:25.357 回答