我有以下类和接口(interface):publicinterfaceIThing{stringName{get;}}publicclassThing:IThing{publicstringName{get;set;}}publicabstractclassThingConsumerwhereT:IThing{publicstringName{get;set;}}现在,我有一个工厂将返回从ThingConsumer派生的对象,例如:publicclassMyThingConsumer:ThingConsumer{}我的工厂目前是这样的:publicstaticclassThingCon
在下面的代码中,我想通过派生/子类化来扩展类的行为,并利用基类的事件:publicclassA{publiceventEventHandlerSomeEvent;publicvoidsomeMethod(){if(SomeEvent!=null)SomeEvent(this,someArgs);}}publicclassB:A{publicvoidsomeOtherMethod(){if(SomeEvent!=null)SomeEvent(this,someArgs);//为什么不可能?对于这种情况,常见的解决方案是什么? 最佳答案
我有四个类(class)。请求、派生请求、处理程序、派生处理程序。Handler类有一个具有以下声明的属性:publicabstractRequestrequest{get;set;}DerivedHandler需要覆盖此属性,以便它返回DerivedRequest:publicoverrideDerivedRequestrequest{get;set;}有人对如何使这项工作有任何想法吗? 最佳答案 这并不是构建事物的好方法。执行以下操作之一1)只是不要改变返回类型,在子类中正常覆盖它。在DerivedHandler中,您可以使用R
是否可以使用反射来发现从给定类型派生的所有类型?大概范围将限制在单个程序集中。 最佳答案 和Darin的差不多,但是给你..publicstaticListFindAllDerivedTypes(){returnFindAllDerivedTypes(Assembly.GetAssembly(typeof(T)));}publicstaticListFindAllDerivedTypes(Assemblyassembly){varbaseType=typeof(T);returnassembly.GetTypes().Where(t
在C#中,常量可以在派生类中被覆盖吗?我有一组完全相同的类,除了一些常量值,所以我想创建一个定义所有方法的基类,然后只在派生类中设置相关常量。这可能吗?我宁愿不只是将这些值传递给每个对象的构造函数,因为我希望增加多个类的类型安全性(因为对于具有不同常量的两个对象进行交互永远没有意义)。 最佳答案 如果您想覆盖它,它不是常量;)。尝试虚拟只读属性(或protectedsetter)。只读属性:publicclassMyClass{publicvirtualstringMyConst{get{return"SOMETHING";}}}.
我有一些代码会触发代码分析警告CA1063:CA1063:Microsoft.Design:RemoveIDisposablefromthelistofinterfacesimplementedby'Functionality'andoverridethebaseclassDisposeimplementationinstead.但是,我不确定我需要做什么来修复这个警告。简而言之,我有一个派生自IDisposable的接口(interface)IFunctionality。类Functionality实现了IFunctionality但派生自类Reusable以便能够重用som代码。R
以下代码实现了派生自泛型(SortedDictionary)的UDT:[Serializable][Microsoft.SqlServer.Server.SqlUserDefinedType(Format.UserDefined,MaxByteSize=8000)]publicclassudtMassSpectra:SortedDictionary,INullable,IBinarySerialize,ICloneable,IDisposable{...}创建类型(T-SQL):CREATETYPEdbo.udtMassSpectraEXTERNALNAMEMassSpectra.ud
从非抽象类派生抽象类是否可以,或者这种方法有问题吗?这是一个小例子:publicclassTask{//SomeMembers}publicabstractclassPeriodicalTask:Task{//Representsabaseclassfortaskthathastobedoneperiodicaly.//SomeadditionalMembers}publicclassDailyTask:PeriodicalTask{//RepresentsaTaskthathastobedonedaily.//SomeadditionalMembers}publicclassWeek
据我所知,在C#2.0中无法执行以下操作publicclassFather{publicvirtualFatherSomePropertyName{get{returnthis;}}}publicclassChild:Father{publicoverrideChildSomePropertyName{get{returnthis;}}}我通过在派生类中将属性创建为"new"来解决这个问题,但这当然不是多态的。publicnewChildSomePropertyName2.0有解决办法吗?3.5中解决此问题的任何功能如何? 最佳答案
我是新手,正在尝试理解继承和设计模式的概念。我遇到了这个模式http://en.wikipedia.org/wiki/Strategy_pattern当我浏览一些博客时。我觉得很有趣,想了解更多。所以我开发了以下程序。staticvoidMain(string[]args){Contextcontext;//Threecontextsfollowingdifferentstrategiescontext=newContext(newConcreteStrategyAdd());intresultA=context.executeStrategy(3,4);context=newCont