Asp.net 如何向类添加功能

Asp.net 如何向类添加功能,asp.net,oop,c#-3.0,Asp.net,Oop,C# 3.0,我有一系列的类,我想能够'螺栓'的一些功能 该功能涉及实现一个属性并能够执行一个操作,该操作使用该属性和每个类特有的其他成员。它感觉像是一个接口和一个抽象类混合在一起。我不能使用抽象类方法,因为这些类已经是许多不同类的子类。我可以使用接口,但是我应该把代码放在哪里?我厌倦了在每堂课上一遍又一遍地写 下面是这个问题的一个例子:我正在使用C#、ASP.NET和web表单。我想“附加”到的类是从许多不同web控件继承的自定义控件(.ascx、.cs)。该功能与在创建子控件后在页面上注册一些脚本有关 非

我有一系列的类,我想能够'螺栓'的一些功能

该功能涉及实现一个属性并能够执行一个操作,该操作使用该属性和每个类特有的其他成员。它感觉像是一个接口和一个抽象类混合在一起。我不能使用抽象类方法,因为这些类已经是许多不同类的子类。我可以使用接口,但是我应该把代码放在哪里?我厌倦了在每堂课上一遍又一遍地写

下面是这个问题的一个例子:我正在使用C#、ASP.NET和web表单。我想“附加”到的类是从许多不同web控件继承的自定义控件(.ascx、.cs)。该功能与在创建子控件后在页面上注册一些脚本有关

非常感谢您提供的任何见解。

可能会提供您想要的。

可能会提供您想要的。

我想这可能会有所帮助。发件人:

这种分离的一个实际结果是能够向现有对象结构添加新操作,而无需修改这些结构

您遇到了一个关于复杂继承链的常见问题,它们可能非常难以修改。

我认为这可能会有所帮助。发件人:

这种分离的一个实际结果是能够向现有对象结构添加新操作,而无需修改这些结构

您遇到的一个常见问题是复杂的继承链,它们可能非常难以修改。

请使用一个。创建一个新对象,该对象实现您试图“附加”的功能。创建一个表示此新对象的API的接口。然后在对象上实现接口:

public class MyCompositeObject: Base, IBoltOn
{
    protected IBoltOn BoltOn = new BoltOn();

    # region IBoltOn members
    public void SomeMethod()
    {
        BoltOn.SomeMethod();
    }
    public sometype SomeProperty {
        get {
           return BoltOn.SomeProperty;
        }
        set {
            BoltOn.SomeProperty=value;
        }
    }
    # endregion
}
使用一个。创建一个新对象,该对象实现您试图“附加”的功能。创建一个表示此新对象的API的接口。然后在对象上实现接口:

public class MyCompositeObject: Base, IBoltOn
{
    protected IBoltOn BoltOn = new BoltOn();

    # region IBoltOn members
    public void SomeMethod()
    {
        BoltOn.SomeMethod();
    }
    public sometype SomeProperty {
        get {
           return BoltOn.SomeProperty;
        }
        set {
            BoltOn.SomeProperty=value;
        }
    }
    # endregion
}

你应该看看PostSharp,了解面向方面的编程。你应该看看PostSharp,了解面向方面的编程。谢谢,这看起来是一个优雅的问题解决方案。这是一种在某种程度上违反直觉的模式,因为你觉得你最终编写了很多不做任何事情的属性。是的,但一旦你克服了这一点,你就会爱上炸弹。不要试图直接公开BoltOn对象并使用其方法,如
MyCompositeObjectInstance.BoltOn.SomeProperty..
——这会破坏接口和API的实用性。谢谢,这看起来像是一个优雅的问题解决方案。这是一个在某些方面违反直觉的模式,因为你觉得你最终编写了很多不做任何事情的属性。是的,但一旦你克服了这一点,你就会爱上炸弹。不要试图直接公开BoltOn对象并使用其方法,如
MyCompositeObjectInstance.BoltOn.SomeProperty..
——这会破坏接口和API的实用性。