草庐IT

c# - 如何从派生类中获取基类实例

我不知道这是否可行,但我正在尝试从派生类中获取基类实例。在C#中,我可以使用base关键字来访问基类的属性和方法(当然),但我想使用base本身。尝试这样做会导致“在此上下文中使用关键字‘base’无效”。示例代码publicclassSuperParent{publicintSPID;publicSuperParent(){}}publicclassSubChild:SuperParent{publicSubChild(intpSPID){base.SPID=pSPID;}publicintBaseSPID{get{SuperParentsp=base;returnsp.SPID;}

c# - 在基类中定义的 log4net 记录器

我想像这样在我的MVCController抽象基类中构建我的log4net记录器:protectedstaticreadonlyILogLog=LogManager.GetLogger(typeof(AuthorizedController));以这种方式,我可以一次定义记录器并完成它。唯一的问题是日志输出中的记录器属性将始终是AuthorizedController,如果我有FooController继承自AuthorizedController我想日志输出以反射(reflect)这一点。执行此操作的KISS、DRY和有效方法是什么? 最佳答案

C# 反射 - 派生类型中的基类静态字段

在C#中,当我反射(reflect)派生类型时,为什么看不到基类的静态字段?我已经尝试了type.GetFields(BindingFlags.Static)和type.GetFields()。 最佳答案 这就是它的工作原理。static成员实际上是非面向对象的东西。它们不是多态的,它们确实属于它们的声明类型,并且与继承层次结构中的其他类型无关。例如,在访问派生类中的静态成员之前,不需要运行基类的静态初始化程序。除非指定了BindingFlags.FlattenHierarchy,否则不会返回基类的static成员:type.Get

c# - 当基类中只需要依赖时,在基类中使用属​​性注入(inject)是否合适?

例子:publicabstractclassBaseControler:Controller{publicIUnitOfWorkUnitOfWork{get;set;}}publicclassHomeController:BaseControler{readonlyIUserRepository_userRepository;//:-)publicHomeController(IUserRepositoryuserRepository){_userRepository=userRepository;}}我们都知道,当需要依赖时,我们必须使用构造函数注入(inject)。如果它是一个可选

c# - 如何从基类中获取子类的 `Type`

我有一个抽象基类,我想在其中实现一个方法来检索继承类的特性属性。像这样的……publicabstractclassMongoEntityBase:IMongoEntity{publicvirtualobjectGetAttributeValue(stringpropertyName)whereT:Attribute{varattribute=(T)typeof(this).GetCustomAttribute(typeof(T));returnattribute!=null?attribute.GetType().GetProperty(propertyName).GetValue(a

c# - 具有通用测试的 Nunit 基类

我正在使用nunit为某些类做一些测试。有几个操作对所有测试类都是通用的,但需要不同的参数才能工作。所以我在基类中添加了测试,在基类中添加了虚方法来提供参数。在派生测试类中,我重写了虚拟方法以为基类中的测试提供特定参数。现在我的问题是我希望基类中的测试只从派生类中执行。我目前在基类上使用ignore属性来忽略测试,但这会在运行测试时引起一些警告,并且如果有许多被忽略的测试,则有一个策略不允许我将更改提交到svn。那么如何在不使用基类的ignore属性的情况下仅从派生类中的基类运行测试。 最佳答案 您应该能够将您的基类标记为抽象类,这

c# - 我应该在 Windows 服务中调用基类的方法吗?

从ServiceBase派生时,是否也应该调用基类的方法?protectedoverridevoidOnStart(string[]args){////ThestuffIdowhentheservicestarts.//base.OnStart(args);//DoIneedtocallthis?} 最佳答案 简短的回答是肯定的,你应该。在这种特定情况下,OnStart方法的基本实现不会做任何重要的事情,但这是一个可能随时更改的实现细节。作为一般做法,您应该始终调用基方法,除非您有充分的理由不这样做。

c# - 从派生类复制基类的内容

我目前有一个派生类和一个基类。如何使派生类的基类等于我拥有的基类?浅拷贝有用吗?classBase{privatestringname;publicstringName{get;set;}privatestringaddress;publicstringAddress{get;set;}}classDerived:Base{privatestringfield;publicStringfield{get;set;}}namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){Baseb=newBase()

c# - 在与基类成员同名的派生类成员中使用 new 关键字的好处

C#语言规范说,如果我继承了一个类,并且基类和派生类具有相同的命名成员和相同的签名,那么我必须使用new关键字来隐藏基类成员(还有一种方法是在基类和派生类成员中使用virtual和override关键字)。但在实践中我发现,如果派生类具有相同的命名成员,则派生类会自动隐藏派生成员。那么同名派生类成员中的新关键字的主要好处和问题是什么? 最佳答案 如您所述,不需要新的。它是可选的,如果您不使用它,您会收到警告。乍一看这是一个奇怪的设计决定,您是完全正确的。此设计决策的目的是帮助缓解称为“脆弱基类”问题的一类问题。这是该问题的一个版本:

c# - 抽象基类/派生类的空合并问题

为什么C#空合并运算符无法解决这个问题?Catc=newCat();Dogd=null;Animala=d??c;这会报错运算符??不能应用于Dog和Cat类型的操作数考虑到以下编译,这看起来很奇怪。Animala=d;a=c;上下文代码如下:publicabstractclassAnimal{publicvirtualvoidMakeNoise(){Console.WriteLine("noise");}}publicclassDog:Animal{publicoverridevoidMakeNoise(){Console.WriteLine("wuff");}}publicclas