我不认为这是可能的,但如果是,那么我需要它:)
我有一个由Visual Studio 2008从wsdl.exe命令行工具自动生成的代理文件.
代理输出是部分类.我想覆盖生成的默认构造函数.我宁愿不修改代码,因为它是自动生成的.
我尝试制作另一个部分类并重新定义默认构造函数,但这不起作用.然后我尝试使用覆盖和新关键字,但这不起作用.
我知道我可以继承部分类,但这意味着我必须将所有源代码更改为指向新的父类.我宁愿不必这样做.
任何想法,解决方法或黑客?
//Auto-generated class
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public MyWebService() {
string myString = "auto-generated constructor";
//other code...
}
}
}
//Manually created class in order to override the default constructor
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public override MyWebService() { //this doesn't work
string myString = "overridden constructor";
//other code...
}
}
}
Run Code Online (Sandbox Code Playgroud) 我希望创建一个自定义属性来抑制在C#中执行方法,即使它被调用.例如,在下面的代码块中,如果方法具有"跳过"属性,即使从Main调用它也不应该执行.
public class MyClass {
public static void main()
{
aMethod();
}
[Skip]
public void aMethod() {
..
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用C#中的反射来实现这一目标?
在下面的代码片段中,我设法提取了带有Skip属性的方法,我无法弄清楚如何阻止它们执行!
MethodInfo[] methodInfos = typeof (MyClass).GetMethods();
foreach (var methodInfo in methodInfos)
{
if (methodInfo.HasAttribute(typeof(SkipAttribute)))
{
// What goes here ??
}
}
Run Code Online (Sandbox Code Playgroud)
我们非常欢迎任何有正确方向的帮助或建议:)
比方说,我有很多Web应用程序使用在C#中编译成dll的相同类库,我想更新特定应用程序的类的特定方法.我不想更改现有代码,因为它会影响每个人,我不想从类继承来创建新代码.我只想更改单个应用程序的类的现有方法.
实现此目的的一种方法是将编译的类作为"基础"类,并具有包含继承基类的所有重写类的单独文件.然后应用程序将使用继承的类.然后,要更改单个应用程序的类,您只需更新继承的类.我用这种方法看到的唯一问题是每个应用程序都需要2个文件,一个基类和一个继承(可能没有编译).
任何人都可以推荐更好的方法吗?