以下代码是否应该发出警告?
class Foo { public void Do() { /*...*/ } /*...*/ }
class Bar : Foo { public static void Do() { /*...*/ } /*...*/ }
Run Code Online (Sandbox Code Playgroud)
它给:
"警告CS0108:'Bar.Do()'隐藏继承的成员'Foo.Do()'.如果想要隐藏,请使用new关键字."
如果我对代码进行了更改:
class Foo { public static void Do() { /*...*/ } /*...*/ }
class Bar : Foo { public void Do() { /*...*/ } /*...*/ }
Run Code Online (Sandbox Code Playgroud)
我得到同样的警告.
但是,如果我做出以下更改,警告就会消失.
class Foo { public void Do() { /*...*/ } /*...*/ }
class Bar : Foo { new public static void Do() { /*...*/ } …
Run Code Online (Sandbox Code Playgroud) 我正在调用ModelMetadataProviders.Current.GetMetadataForProperties来使用Visual Studio 2010获取WPF应用程序中的ModelMetadata列表.此调用执行正常,我得到IEnumerable <>作为回报.在代码行,我尝试迭代这个,我得到System.MethodAccessException.
有趣的是,只有在我使用F5进行调试时才会发生这种情况.如果我用Ctrl + F5运行代码,那么我不会得到这个异常,代码工作正常.如果我从Windows资源管理器运行exe,它运行良好.
当然,我错过了一些东西.可能是,System.Web.Mvc无法从WPF应用程序中使用?(为什么)有关visual studio调试器的东西吗?
任何帮助将不胜感激.
这是完整的例外:
尝试通过安全透明方法'System.Web.Mvc.TypeDescriptorHelper.Get(System.Type)'来访问安全关键方法'System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider..ctor(System.Type)'失败.
程序集'System.ComponentModel.DataAnnotations,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'是有条件的APTCA程序集,在当前的AppDomain中未启用.为了使该组件由部分信任或安全性的透明的代码中使用,请在创建应用程序域时添加组件名称"System.ComponentModel.DataAnnotations,公钥= 0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9"到的PartialTrustVisibleAssemblies列表.
你知道以下问题的答案吗?
让我们说,MyMethod()在MyPartialClass.cs中的MyPartialClass中被声明为部分方法.我还在MyPartialClass2.cs中的MyPartialClass中提供了MyMethod()的主体.我使用一个问题而没有回答"魔术"代码生成器实际生成了MyPartialClass.cs,让我们说基于一些数据库架构.一些无辜的家伙改变架构为好,然后运行"魔术".重新生成MyPartialClass.cs,但使用MyMethod2()而不是MyMethod()声明.想起我.我想我已经实现了"魔术"使用的MyMethod(),但实际上,"Magic"正在使用MyMethod2().C#编译器没有告诉我没有任何声明我实现了部分方法,我的实现根本就没用过!
有解决方案吗
我认为这是一个没有答案的问题.
编辑我得到了答案:-).我的代码中有一个拼写错误,这就是编译器没有标记错误的原因.乔恩已经指出了这一点.