Tag: 覆盖

覆盖.ToString()

我想覆盖.ToString()函数,这样每当我得到一个double时,它只输出小数点后的5位数。 如何在覆盖函数内部对.ToString正在处理的对象进行处理? 换句话说,我在下面的代码中放了什么shell而不是XXX? public override string ToString() { if (XXX.GetType().Name == “Double”) return (Math.Round(XXX, 5)); }

覆盖entity framework实体属性

我在EF中有一个名为Profile的实体,我想将数据注释属性添加到该实体的“FirstName”属性中,所以我创建了一个新的分部类,如此; public partial class Profile : EntityObject { [Required] [Display(Name = “First Name”)] [EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = false)] [DataMemberAttribute()] override public global::System.String FirstName { get { return _FirstName; } set { OnFirstNameChanging(value); ReportPropertyChanging(“FirstName”); _FirstName = StructuralObject.SetValidValue(value, false); ReportPropertyChanged(“FirstName”); OnFirstNameChanged(); } } } 但我得到了这个; The type ‘CC.Models.Profile’ already contains a definition for ‘FirstName’ 有任何想法吗? 问候, […]

在覆盖C#for ASP.NET中的方法时,我应该调用基类实现吗?

我理解重写一个方法/函数从它在基类中的实现重新定义它在派生类中的实现。 现在令我困惑的是,如果我覆盖ASP.NET中的一个类,比如CreateChildControls() (我没有特别的原因随机选择它),VS2008自动生成: protected override void CreateChildControls() { base.CreateChildControls(); } 足够好,默认实现只调用基类’ CreateChildControls() 。 所以,如果我想运行一些代码,因为我不知道base.CreateChildControls()如何,我应该这样做: protected override void CreateChildControls() { /*My Code Here*/ base.CreateChildControls(); } 或者,完全忽略base.CreateChildControls() protected override void CreateChildControls() { /*My Code Here*/ }

带子类参数的C#覆盖方法

我正在努力实现这样的目标 public abstract class BaseEvent { public abstract void Dispatch(IEventHandler handler); } public class MyEvent : BaseEvent { public override void Dispatch(IMyEventHandler handler) { handler.OnMyEvent(this); } } public interface IEventHandler { } public interface IMyEventHandler : IEventHandler { void OnMyEvent(MyEvent e); } 问题是编译器抱怨说MyEvent没有实现BaseEvent因为Dispatch正在使用IMyEventHandler而不是IEventHandler 。 我不想让MyEvent.Dispatch接受一个IEventHandler然后将它转换为IMyEventHandler因为我想编译时间检查以确保我没有像传递其他类型的事件处理程序那样做一些愚蠢的事情。 我找到了一个可能的解决方案(下面),但我想知道是否有更好的方法来做到这一点。 public abstract class BaseEvent where H : IEventHandler { […]

用Reflection覆盖私有方法

是否可以通过在.NET 3.5中使用Reflection来覆盖私有方法?

C#可以从派生类调用基类属性

我有一个基类,其属性具有setter方法。 有没有办法从派生类调用基类中的setter,并为其添加更多function,就像使用base关键字的overriden方法一样。 对不起,我应该添加一个例子。 这是一个例子。 希望我做对了: public class A { public abstract void AProperty { set { // doing something here } } } public class B : A { public override void AProperty { set { // how to invoke the base class setter here // then add some more stuff here } } }

如何覆盖更丰富类型的接口方法中定义的参数?

我有这些: public class TennisPlayer { } public class RogerFederer : TennisPlayer { } public class RafaelNadal : TennisPlayer { } 然后我有一些方法类,如下所示: public abstract class Manager { protected abstract void ScheduleFriendlies(TennisPlayer player); } public class RafaelNadalManager : Manager { public void ScheduleFriendlies(RafaelNadal rn) { //throw new NotClayException(); } } public class RogerFedererManager : Manager { public […]

覆盖回车键,但保持wpf数据网格中其他键的默认行为

让我感到困扰的是,按下数据网格中的回车键会将选择项向下移动一个项目,我希望能够在正常的keydown事件中决定它的作用。 所以我所做的是创建一个新类,它inheritanceDataGrid并覆盖OnKeyDown事件并将其用作我的datagrid。 这会产生一系列全新的问题,因为我显然必须重写所有其他按键(箭头键导航,shift +箭头键选择,pgup / pgdn等等)。 我一直试图破解它,但只是花了很多时间来重写已经写好的东西并且可能比我想出的更好。 那么如何在不弄乱datagrid的其他默认键绑定的情况下让enter键执行我想要的操作呢? 提前致谢

基类可以确定派生类是否覆盖了虚拟成员吗?

这是我class级的简化版本: public abstract class Task { private static object LockObject = new object(); protected virtual void UpdateSharedData() { } protected virtual void UpdateNonSharedData() { } public void Method() { lock(LockObject) { UpdateSharedData(); } UpdateNonSharedData(); } } 我试图隐藏派生类的锁定代码。 但是,如果派生类重写UpdateSharedData,我只想获取锁; 如果没有,我不希望该方法在更新非共享数据之前阻止并等待所有其他正在更新共享数据的正在运行的实例。 所以对于Method来说(看似)显而易见的事情是检查并查看当前实例的UpdateSharedData实现是否覆盖了基类的实现。 我很确定如果不使用reflection这是不可能的,并且可能不希望这样做。 我已经想到了一些解决方法,但它们都很尴尬: 添加派生类的构造函数设置的受保护bool属性,并检查该属性以查看是否需要锁定。 这在隐藏派生类中的锁定代码方面做得非常糟糕。 使UpdateSharedData方法成为委托属性,让任何派生类在其构造函数中将属性设置为私有方法,并且只有在委托不为空时才获取锁。 那更好,但它仍然很糟糕。

是否可以使用派生参数而不是基础参数覆盖方法?

我陷入了这种情况: 我有一个名为Ammo的抽象类, AmmoBox和Clip作为子项。 我有一个名为Weapon的抽象类, Firearm和Melee是孩子。 Firearm是抽象的, ClipWeapon和ShellWeapon是孩子。 在Firearm内部,有一个void Reload(Ammo ammo); 问题是, ClipWeapon可以使用Clip和AmmoBox重新加载: public override void Reload(Ammo ammo) { if (ammo is Clip) { SwapClips(ammo as Clip); } else if (ammo is AmmoBox) { var ammoBox = ammo as AmmoBox; // AddBullets returns how many bullets has left from its parameter ammoBox.Set(clip.AddBullets(ammoBox.nBullets)); } } 但ShellWeapon只能使用AmmoBox重新加载。 我能做到这一点: […]