Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重写dll类属性集_C#_Overriding - Fatal编程技术网

C# 重写dll类属性集

C# 重写dll类属性集,c#,overriding,C#,Overriding,在我的项目中,我使用了一千个封闭DLL类的实例 public sealed class DllClass { public DllClass(); public string DllClassProperty {get; set;} } DllClassProperty集被使用了一千次,如果在Web.config上设置了参数,我需要重写该值集 我找到了这个接口,但我无法使用它,因为我没有访问该类的权限,也无法扩展它 我在想,如果有这样的方法,但我认为这在C#中是不可能的: s

在我的项目中,我使用了一千个封闭DLL类的实例

public sealed class DllClass 
{
    public DllClass();
    public string DllClassProperty {get; set;}
}

DllClassProperty集被使用了一千次,如果在Web.config上设置了参数,我需要重写该值集

我找到了这个接口,但我无法使用它,因为我没有访问该类的权限,也无法扩展它

我在想,如果有这样的方法,但我认为这在C#中是不可能的:

setPropertyListener上的公共类
{
公共void OnSetProperty(PropertyInfo PropertyInfo,DllClass实例)
{
//设置另一个值,例如:“新值”
}
}
如何覆盖DllClassProperty中设置的值?有可能吗?

令人惊讶的是,有一种方法可以解决你的问题。这并不漂亮,但它满足了你问题的约束条件

步骤1:围绕
DllClass
创建一个包装器,即一个新类
mydllclasswapper
,其行为与
DllClass
完全相同,只是要实现的更改除外。这通常是通过重建
DllClass
的公共接口,并将所有操作转发到私有
DllClass
实例来完成的

现在,您只需在当前使用
dllclasswrapper
的任何地方使用
MyDllClassWrapper即可。您在评论中提到,您不想更改所有这些调用,因此让我们实现自动化:

步骤2:用于在编译后步骤中通过引用
mydllclasswapper
自动替换对
DllClass
的所有引用:

[assembly: Substitute(typeof(DllClass), typeof(MyDllClassWrapper))]


但是,请注意,每个阅读您的代码的人都会完全困惑,因为源代码指向
DllClass
,而使用
mydllclasswapper
。因此,我建议您仅将此技术用作临时解决方法,直到您找到时间将对
DllClass
的所有引用完全替换为对
mydllclasswapper

的引用。如果未另外设置值,是否可以修改
DllClass
类本身以查阅web.config?“我需要覆盖该值”您的意思是您需要覆盖该值吗?因此“如果在Web.config上设置了参数”。您希望在所有“数千个实例”中提供
DllClassProperty
“新的价值观?我说的对吗?@JonSkeet没有。这是一个封闭的dllRight-我建议你在你的问题中加入这一点。您是否能够将创建实例的所有地方替换为对工厂方法的调用(在您自己的代码中),该工厂方法创建实例并基于web.config填充属性?如果您无法更改
DllClass
中的代码或使用
DllClass
的代码,那你就别无选择了。这是一种类似适配器设计模式的方法吗?@FaizanRabbani:我认为匹配的设计模式将是最优秀的。@Heinzi!这正是我需要的。正如你所说,我会把它作为临时解决办法。实际上,我将使用包装器进行开发验证。此属性是电子邮件属性,我将设置我的电子邮件以验证项目发送的所有电子邮件。谢谢。
[assembly: Substitute(typeof(DllClass), typeof(MyDllClassWrapper))]