草庐IT

inheritance

全部标签

c# - Mono.Cecil type.IsAssignableFrom(derivedType) 等效项

我正在使用Mono.Cecil在Assembly中查找派生自给定的类型。通常可以使用IsAssignableFrom()方法来完成,但我无法确定它在Cecil中是等效的。有没有这样的方法或其他方法来检查它?谢谢迈克 最佳答案 继承检查和“赋值兼容性”检查实际上是不同的东西。您要检查继承还是“分配兼容性”?赋值兼容性包括很多东西,包括有符号/无符号转换、枚举到基类型的转换、char至short转换、通用方差转换、从接口(interface)到object的转换,从数组到IList和IList以及它们的基本接口(interface)、数

c# - "Depth of Inheritance"对方法意味着什么?

我刚刚安装了VisualStudioPowerToolforcodeanalysis和theviewerfortheresults.顺便说一句,很棒的工具!当我点击“分析解决方案”时,我得到了结果:可维护性圈复杂度继承的深度类耦合代码行数我理解这些都是什么意思,除了一个类中的每个方法都有不同的“继承深度”值,并且该类的值更大。有没有人解释这可能在说什么? 最佳答案 由于每个派生类都扩展了前一个类,因此它添加了额外的功能。它可以添加先前基类中不存在的属性或方法。现在,总的方法集比基类的要大。当派生类再次派生时,可以重复这个过程。因此,

c# - 是否有结构继承的实用替代方案? (C#)

我正在编写代码来填充System.Windows.Documents中类的Margin、Padding和BorderThickness属性命名空间。这些属性中的每一个都接受System.Windows.Thickness形式的值,这是一个结构。但是,我希望将一些额外的数据与这些属性分配中的每一个关联起来,这些数据随后可能会被我的代码检索到。如果Thickness是一个类,我将从它继承并在子类中定义属性来存储我的附加数据项。但是因为它是一个结构,所以继承是不可能的。有没有什么实用的方法可以实现这一点,同时保持与我正在填充的属性的类型兼容性?谢谢你的想法,蒂姆

c# - C#中继承的性能考虑

如果我使用publicintI;(或任何其他字段)创建一个类,与创建一个继承自具有publicint的基类的类相比,编译器是否会生成相同的IL我;?无论哪种方式,生成的类的行为都相同,但编译器的行为是否相同?也就是说,编译器只是将代码从基类复制粘贴到派生类中,还是在您继承时实际上创建了两个不同的类对象?classA{publicintI;}classB:A{}现在,以下两个DoSomething()调用之间是否存在任何性能差异?vara=newA();varb=newB();DoSomething(a.I);DoSomething(b.I);//Isthislineslowerthan

c# - 类不继承自对象?

我正在研究一种使用反射来检查方法的参数类型的方法。此方法遍历ParameterInfo并使用这些参数的类型执行某些操作。我一直假设如果TypeInfo.IsClass为true,则此类型是一个类并且始终(间接)派生​​自类型object(当然,当类型是object本身时除外)。因此,如果TypeInfo.IsClass为真,则必须设置TypeInfo.BaseType。好吧,我的假设是错误的!有些类不是从object类型派生的。我的假设搞砸了我的代码。例如:Typetype=typeof(int).MakeByRefType();type.IsClass将为true并且type.Bas

c# - Unity【依赖】注入(inject)与继承

我的问题如下:我有一个名为ApplicationController的基本Controller(ASP.NetMVCController),我希望我的所有Controller都继承自它。这个基本Controller有一个ILogger属性,标有[Dependency]属性。(是的,我知道我应该使用构造函数注入(inject),我只是对这个属性感到好奇)。我创建了容器,注册了类型,更改了默认工厂,一切都很好。问题是当我尝试在派生Controller中使用我的Logger属性时,它没有得到解决。我做错了什么?为什么容器在创建派生Controller时不解析基类依赖?代码示例:应用程序Con

c# - 使用派生类型和同名 C# 覆盖属性

我试图用不同但派生类型相同的名称覆盖基类中的属性。我认为可以通过协变或泛型来实现,但我不确定该怎么做?以下代码得到错误:Error1'Sun.Cache':typemustbe'OuterSpace.Cache'tomatchoverriddenmember'OuterSpace.Cache'publicclassOuterSpace{publicvirtualOuterSpaceDataData{get;set;}publicvirtualOuterSpaceAnalysisAnalysis{get;set;}publicvirtualOuterSpaceCacheCache{get

c# - 在数据库中存储具有公共(public)基类的对象

假设我有一个共同的基类/接口(interface)interfaceICommand{voidExecute();}然后有一些命令继承自这个接口(interface)。classCommandA:ICommand{intx;inty;publicCommandA(intx,inty){...}publicvoidExecute(){...}}classCommandB:ICommand{stringname;publicCommandB(stringname){...}publicvoidExecute(){...}}现在我想用一种通用方法将这些命令存储在数据库中,然后将它们全部从数据

c# - 我可以强制后代拥有无参数构造函数吗?

我正在尝试创建一个类似工厂模式的通用机制。工厂会是这样的:publicclassAPluginwhereActionType:IAction{//createanewaction.Note:ActionTypeshouldcontain//anemptyconstructorpublicActionTypeCreateAction(){returnActivator.CreateInstance();}}IAction的后代可能会隐藏无参数构造函数,这将导致工厂失败。 最佳答案 您可以通过提供通用约束来确保类具有不带参数的构造函数w

c# - 在 .NET 中创建插件环境的最佳方式

我读了这篇文章Howtoloadpluginsin.NET?,我真的看不出微软的System.Addin命名空间有什么高明之处。为什么我不能在我的bin目录中有一个plugins文件夹,用户可以将一个程序集放入其中来实现我设计的界面?然后我可以只使用反射来创建插件类的实例,并在我的界面中引用它。为什么System.Addin方式明显好得多?尤其是因为它看起来像是三倍的工作量和不太直观的设计。 最佳答案 我建议查看ManagedExtensibilityFramework(已添加到.NET4的核心框架中)。它允许您完全按照您的描述进行