当前位置:  开发笔记 > 编程语言 > 正文

你如何"覆盖"C#中的内部类?

如何解决《你如何"覆盖"C#中的内部类?》经验,为你挑选了2个好方法。

我想在System.Web.Script.Services.ScriptHandlerFactory和内部类中的其他.NET内容中自定义.不幸的是,这是一个内部课程.尝试自定义此类中的方法时,我有哪些选项?



1> Joel Coehoor..:

您可能会发现这篇近期文章很有启发性.基本上,它表示你不能覆盖任何标记的东西internal,并且源代码就像它获得的权威一样.你可以期待的最好的是一种扩展方法.



2> Kris..:

内部关键字表示代码单元(类,方法等)对其所在的程序集是"公共的",但对任何其他程序集都是私有的.

因为你不在同一个集会中,所以你什么也做不了.如果它不是内部的,那么在扩展类时,可以在覆盖的方法上使用new关键字(隐藏原始实现).

简而言之:你是SOL.

我能想到的唯一能做的就是编写一个代理类,其中一个私有字段是你想要扩展的类,你实现它的所有方法并代理它们的调用.这样你仍然可以自定义输出,但你必须使用你的课程,并考虑它标记为内部,我不确定没有一些严重的黑客可能.

using System;
...
using System.Web.Script.Services

namespace MyGreatCompany.ScriptServices 
{
    public class MyScriptHandlerFactory /* implement all the interfaces */
    {
        private ScriptHandlerFactory internalFactory;
        public MyScriptHandlerFactory()
        {
            internalFactory = new ScriptHandlerFactory();
        }
        ...
    }
}

可以使您想要实现的目标成为可能,但它不会很漂亮.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有