首页新闻找找看学习计划

C# 在不修改原有代码的前提下给原有代码增新的功能

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-07-29 11:32

如题!!

最好给个例子!!

 

 

比如说一个编译好的类!!我如何在不修改源代码的基础上给这个类增新的功能!!

 

比如说我想在此类某个方法执行之前!执行一些功能性模块!!

田麦成的主页 田麦成 | 小虾三级 | 园豆:1982
提问于:2012-06-14 09:28
< >
分享
所有回答(7)
0

使用代码注入技术。

无之无 | 园豆:5085 (大侠五级) | 2012-06-14 09:41

我也知道概念!!

 

你这样的回答就像,问:我怎么做原子弹,答:用铀裂变,核聚变!

支持(0) 反对(0) 田麦成 | 园豆:1982 (小虾三级) | 2012-06-14 10:42

@田麦成: HOHO。

最简单的方案就是自己写一个代理。DLL名称、名称空间等都完全一样,然后在这个代理类里的方法中实现你的需求,必要的时候,调用原来的 DLL中的 相应方法。

支持(0) 反对(0) 无之无 | 园豆:5085 (大侠五级) | 2012-06-14 10:47

@笨笨蜗牛: 

给个简单的示例啊……

光说不做,假把式啊……!

支持(0) 反对(0) 田麦成 | 园豆:1982 (小虾三级) | 2012-06-14 12:10

@田麦成: 那就假把式了!

支持(0) 反对(0) 无之无 | 园豆:5085 (大侠五级) | 2012-06-14 12:34
0

使用静态扩展方法

Learning(C#) | 园豆:23 (初学一级) | 2012-06-14 10:16
0

我以前通过修改IL代码实现过,操作步骤:用ildasm/ilasm修改IL代码

dudu | 园豆:38650 (高人七级) | 2012-06-14 10:29

我觉得这也是一种“修改原有代码” - -

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-06-14 10:30

@水牛刀刀: 问题中说的是“在不修改源代码的基础上”

支持(0) 反对(0) dudu | 园豆:38650 (高人七级) | 2012-06-14 10:32
0

靜態擴展方法 繼承,實現新類。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-06-14 14:22
0

可以用扩展方法

例如

public static class Extensions
{
public static void DoSth(this string s)
{
    //do sth.
}
}

这样string类型就多了DoSth方法。。。。。。

松鼠鱼 | 园豆:185 (初学一级) | 2012-06-14 14:36

!!有没有利用像AOP这样的技术来控制呢……

支持(0) 反对(0) 田麦成 | 园豆:1982 (小虾三级) | 2012-06-14 15:10
0

可以使用代理类

    public class Test
    {
        public void DoTest()
        {
            Console.WriteLine("DoTest");
        }
    }

    public class TestProxy
    {
        private Test test = new Test();
        public void DoTest()
        {
            Console.WriteLine("Before DoTest");
            test.DoTest();
        }
    }
飞浪 | 园豆:243 (菜鸟二级) | 2012-06-15 11:02
0

在该类加上partial关键字   然后在写另外的类来扩展这个类...... 

大傻蛋啊 | 园豆:292 (菜鸟二级) | 2012-06-15 16:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册