Tag: 覆盖

访问重写方法

有一个练习“OverloadResolutionOverride” 以下代码的输出结果如何: class Foo { public virtual void Quux(int a) { Console.WriteLine(“Foo.Quux(int)”); } } class Bar : Foo { public override void Quux(int a) { Console.WriteLine(“Bar.Quux(int)”); } public void Quux(object a) { Console.WriteLine(“Bar.Quux(object)”); } } class Baz : Bar { public override void Quux(int a) { Console.WriteLine(“Baz.Quux(int)”); } public void Quux(params T[] a) { Console.WriteLine(“Baz.Quux(params […]

如何在C#中评论/记录覆盖?

有时我会覆盖基类中的方法。 有时我甚至用空方法覆盖它们,因为我想要的是防止这种行为。 在过去,我会写这样的东西来表明绕过基本方法的意图 : protected override void OnMouseUp(MouseEventArgs e) { // base.OnMouseUp(e); } (我知道注释的代码行是一件坏事。我曾经这么做过) 但我想做得更好: 如何记录覆盖的意图? 特别: 我在override的XML ( ?) 文档中写了什么?

抽象/虚拟方法的通用返回类型

我有两个基类之间的关系: public abstract class RecruiterBase { // Properties declare here // Constructors declared here public abstract IQueryable GetCandidates(); } public abstract class CandidateBase { // Properties declare here // Constructors declared here } 他们的具体实现如下: public class CandidateA : CandidateBase { // Constructors declared here } public class RecruiterA : RecruiterBase { // Constructors declared here […]

从非generics类重写抽象generics方法

基类 class Drawer { public abstract void Draw(T type); } 派生类#1 class ADrawer : Drawer { public override void Draw(List list) { foreach (var a in list) { DrawA(a); } } public void DrawA(Agent a) { //draw code here } } 派生类#2 class AnotherDrawer : Drawer { public override void Draw(T number) { if (number […]

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

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

超越属性和reflection的奇怪效应

我在.NET / Reflection中遇到了一个奇怪的行为,无法找到任何解决方案/解释: class A { public virtual string TestString { get; set; } } class B : A { public override string TestString { get { return “x”; } } } 由于属性只是函数对( get_PropName() , set_PropName() get_PropName() , set_PropName()只覆盖“get”部分应该保留“set”部分,就像它在基类中一样。 这就是如果您尝试实例化B类并为TestString赋值,它会使用A类的实现。 但是如果我在reflection中查看B类的实例化对象会发生什么呢? PropertyInfo propInfo = b.GetType().GetProperty(“TestString”); propInfo.CanRead —> true propInfo.CanWrite —> false(!) 如果我尝试从reflection中调用setter: propInfo.SetValue(“test”, b, null); […]

解析虚拟覆盖中的“派生最多”方法

我有一个简单的基类和派生类: class Base { public virtual void Write(int value) { Console.WriteLine(“base int: {0}”, value); } public virtual void Write(string value) { Console.WriteLine(“base string: {0}”, value); } } class Derived : Base { public override void Write(int value) { Console.WriteLine(“derived int: {0}”, value); } public virtual void Write(IEnumerable enumerable) { Console.WriteLine(“derived IEnumerable: {0}”, enumerable); } public […]

C# – 什么时候打电话给base.OnSomething?

我正在使用Windows.Forms并且必须inheritance一些控件来提供自定义行为。 这种inheritance显然会导致方法覆盖。 所以,这里有一个问题 – 在哪种情况下调用base.OnSomething(…)的顺序可以真正影响程序的可见行为? protected override OnRetrieveVirtualItem(RetrieveVirtualItemEventArgs e) { // base.OnRetrieveVirtualItem(e); – Could this potentially break something? // Perform your custom method. // … base.OnRetrieveVirtualItem(e); // Is this always “correct”? } 据我所知,当重写与绘画相关的方法( OnDrawItem, … )时,这个顺序很重要,但我想还有其他一些方法可以在腿上拍摄自己,因为Windows.Forms会做很多事情。非托管代码调用可能的副作用。 那么,什么时候可能重要? 在这些情况下,选择正确的位置来调用base方法有哪些经验法则?

有没有办法强制派生类实现抽象类或嵌套在基类中的接口?

我有这个抽象类: public abstract class Task { public string ID {get; set;} public string Name {get; set;} public abstract class Options{}; public abstract void Execute(); } 我有其他类扩展这个类: public class Copy : Task { public override void Execute() { Console.Write (“running”); } } 我希望每个派生类都实现自己的Options类,以便它们可以拥有自己的参数。 因此, Search类必须使用它需要的属性来实现它自己的Options类,例如“ includesubfolders ”,“ casesensitive ”等。 同时Move任务可以实现它自己:“ 覆盖 ”等。 在抽象类中使属性和方法抽象强制派生类来实现它们自己但在同一个类中定义嵌套抽象类或接口不会强制它的派生类实现它们自己的类。 我可以在每个派生类中单独定义每个属性但由于我想在稍后的Execute方法中查询Task.Options中的属性而失败。 我也尝试过动态对象,但这带来了其他所有问题。

C# – 覆盖事件处理程序 – 添加参数

我正在使用System.Diagnostics.Process类来执行命令行程序。 我使用OutputDataReceived方法将输出重定向到我自己的方法。 pr.OutputDataReceived += new DataReceivedEventHandler(OnDataReceived); pr.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceived); 但是,我有多个线程运行此cmd程序的多个实例。 我想要做的是能够识别输出数据来自哪个流程实例 – 理想情况下,包含名称的字符串。 (每个进程在GUI上都有自己的进度条。我创建了另一个事件来将输出传递给GUI,因此,我需要知道数据来自哪个进程来更新其进度条)。 我开始尝试: public override delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e, string processName); 然后我意识到我必须覆盖Process类中的OutputDataReceived方法。 这反过来意味着我必须创建一个inheritanceSystem.Diagnostics.Process的自定义类,并且有一个接受字符串参数的方法,以便OutputDataReceived事件可以将流程实例名称(字符串)传递给我重写的DataReceivedEventHandler 。 问题的目的是获得关于如何进行的一些意见。 我的建议似乎是实现我想要的正确方法吗? 或者,有更好的方法吗?