如果我有以下强类型View:"%>其中Location是一个抽象类。我有以下Controller,它通过POST:接受强类型模型[HttpPost]publicActionResultIndex(Locationmodel)我收到一个运行时错误,指出“无法创建抽象类这当然是有道理的。但是-我不确定最好的解决方案是什么。我有很多具体类型(大约8个),这是一个只能编辑抽象类属性的View。我尝试做的是为所有不同的具体类型创建重载,并以通用方法执行我的逻辑。[HttpPost]publicActionResultIndex(Citymodel){UpdateLocationModel(mod
如何强制子类实现其父类(superclass)的某些属性?原因是我想使用属性来获取有关该类的一般信息,例如“显示名称”、“说明”或“功能”。所以我想我可以在父类(superclass)中实现它们并强制子类实现这些属性。是否有类似于方法的抽象属性?[abstractDeclareMe]publicabstractclassInheritMe{publicabstractvoidDeclareMe();} 最佳答案 由于你的类迟早要运行,你可以在你的基类中添加检查机制来验证你的子类中某些属性的存在。这里有一些示例代码。classProg
我能否将实现接口(interface)的抽象类留空,并暗示接口(interface)中的所有方法/属性在我的类中都是抽象的。看来我必须在抽象类中再次写出它们,但我真的想避免这种重复。我的原因是我有几个具有不同访问器的接口(interface),一个是公共(public)的,一个是内部的,我想把它们放在一起,所以我有一个抽象类来实现它们,然后可以扩展。publicinterfaceISomePublicProperties{intPropertyOne{get;}}internalinterfaceISomeInternalProperties{intPropertyTwo{get;}}
有没有办法添加一个必须被所有继承类覆盖的虚函数?那么实际上是虚拟和抽象的结合?我有一种情况,每个继承的类必须在执行某些通用代码之前进行一些特定的处理。虚函数不起作用,因为它们不能确保继承的类覆盖它们。并且抽象函数不能有默认实现。目前我的解决方法是在基类中实现另一个protected函数,该函数包含公共(public)/通用代码并在重写的抽象函数中调用 最佳答案 不可能有一个既抽象又虚拟的方法。如果可能,您可以将您的方法拆分为“之前”和“之后”部分:publicvoidDoWork(){DoBeforeWork();DoCommonW
我有一个简单的工厂方法,它根据所提供的泛型类型参数提供具体的实现实例。如果具体类继承自具有类型参数的公共(public)抽象基类,我将无法强制转换它们。编译器告诉我Error2Cannotconverttype'Car'to'VehicleBase'.如果我将抽象类替换为具有相同类型参数的接口(interface),或者如果我从抽象类中删除泛型类型参数,它就可以正常工作。interfaceIWheel{}classCarWheel:IWheel{}abstractclassVehicleBase{}classCar:VehicleBase{}classVehicleFactory{pu
我用C#.NET写了下面的代码publicinterfaceIWork{voidfunc();}publicabstractclassWorkClass{publicvoidfunc(){Console.WriteLine("CallingAbstractClassFunction");}}publicclassMyClass:WorkClass,IWork{}编译时,我没有收到任何错误。编译器没有强制我实现方法“func();”在派生自接口(interface)“IWork”的“MyClass”中。之后,我可以优雅地创建类“MyClass”的实例并调用函数“func()”。为什么编译
具有公共(public)构造函数的公共(public)抽象类与具有protected构造函数的公共(public)类之间有什么区别。我们的抽象类中没有任何抽象函数,但我们希望程序员只能创建扩展该类的对象。这两种情况都可以编译和工作,但是我不明白在什么情况下使用哪个更好。我从小就明白,虽然你不能直接实例化一个抽象类(只能通过一个非抽象的子类),但抽象类通常应该包含需要由该类的子类实现的抽象函数。在公共(public)类中没有protected构造函数是否意味着无法实例化此类(这是我们唯一的构造函数)。 最佳答案 MSDNstates关
我在互联网上搜索了一些关于开发C#抽象语法树的新手信息,但我只能找到那些已经“知情”的人的信息。我是一名业务线应用程序开发人员,所以像这样的主题有点让我难以理解,但这是为了我自己的教育,所以我愿意花时间学习任何必要的概念。一般来说,我想了解从代码字符串开发代码抽象表示背后的技术。更具体地说,我希望能够使用这个AST来进行C#语法高亮显示。(我意识到语法高亮不一定需要AST,但这似乎是学习一些“编译器”级技术的好机会。)如果这个问题有点宽泛,我深表歉意,但我不确定还能怎么问。谢谢! 最佳答案 首先你需要了解什么是解析,什么是抽象语法树
我尝试在SO中搜索答案并偶然发现了类似的问题,但我无法使用它们来解决我的问题,因此请尽量不要将其标记为重复。让我们继续进行真正的交易:我有一个用于标准化EntityFramework数据库优先模型的通用库。这些是我创建的通用类:publicabstractclassGenericLookupModel:IActive,ICreated,IModified,IIdentity,IStringValue{publicboolis_active{get;set;}publicstringvalue{get;set;}publicstringdescription{get;set;}publi
我有以下结构:abstractclassBase{publicabstractListGet();//Whatshouldbethegenerictype?}classSubOne:Base{publicoverrideListGet(){}}classSubTwo:Base{publicoverrideListGet(){}}我想创建一个抽象方法,返回具体子类的任何类。因此,正如您从示例中看到的那样,SubOne中的方法应该返回List而SubTwo中的方法应该返回List.我在基类中声明的签名中指定什么类型?[更新]感谢您发布的答案。解决方案是使抽象类通用,如下所示:abstrac