在log4netconfigurationmanual的第一个例子中作者使用typeof(MyApp)获取包含类MyApp的类型。是否有理由不使用this.GetType(),性能方面?因为在我看来this.GetType()在复制到另一个类时更安全,不会出现潜在的复制粘贴错误。 最佳答案 typeof(Foo)是静态类型查找;本质上它发生在编译时,所以你只能得到明确命名的类型。GetType()是动态类型查找;它是一个在运行时调用的虚拟方法,即使您使用多态性也会为您提供准确的类型。所以它在理论上“更慢”,但是它给了你一些你不能从t
有没有办法在C#中获取类名并将其转换为字符串?作为EntityFramework的一部分,.Include方法接受一个以点分隔的字符串列表,以便在执行查询时加入。我有我想要加入的类模型,并且出于重构和future代码维护的原因,我希望在引用这个类时能够具有编译时安全性。因此,有没有办法可以做到这一点:classFoo{}tblBar.Include(Foo.GetType().ToString());我不认为我可以在没有实例的情况下执行GetType()。有什么想法吗? 最佳答案 您不能在没有实例的情况下使用.GetType(),因
有没有办法在C#中获取类名并将其转换为字符串?作为EntityFramework的一部分,.Include方法接受一个以点分隔的字符串列表,以便在执行查询时加入。我有我想要加入的类模型,并且出于重构和future代码维护的原因,我希望在引用这个类时能够具有编译时安全性。因此,有没有办法可以做到这一点:classFoo{}tblBar.Include(Foo.GetType().ToString());我不认为我可以在没有实例的情况下执行GetType()。有什么想法吗? 最佳答案 您不能在没有实例的情况下使用.GetType(),因
我有一个需要快速性能的程序。在其中一个内部循环中,我需要测试对象的类型以查看它是否继承自某个接口(interface)。实现此目的的一种方法是使用CLR的内置类型检查功能。最优雅的方法可能是“is”关键字:if(objisISpecialType)另一种方法是为基类提供我自己的虚拟GetType()函数,该函数返回一个预定义的枚举值(在我的例子中,实际上,我只需要一个bool值)。这种方法会很快,但不够优雅。我听说有一个IL指令专门针对“is”关键字,但这并不意味着它在翻译成native程序集时执行得很快。任何人都可以分享一些关于“is”与其他方法的性能对比的见解吗?更新:感谢所有知情
我有一个需要快速性能的程序。在其中一个内部循环中,我需要测试对象的类型以查看它是否继承自某个接口(interface)。实现此目的的一种方法是使用CLR的内置类型检查功能。最优雅的方法可能是“is”关键字:if(objisISpecialType)另一种方法是为基类提供我自己的虚拟GetType()函数,该函数返回一个预定义的枚举值(在我的例子中,实际上,我只需要一个bool值)。这种方法会很快,但不够优雅。我听说有一个IL指令专门针对“is”关键字,但这并不意味着它在翻译成native程序集时执行得很快。任何人都可以分享一些关于“is”与其他方法的性能对比的见解吗?更新:感谢所有知情
基于几天前在SO中提出的以下问题:GetType()andpolymorphism和阅读EricLippert's回答,我开始考虑如果让GetType()不是虚拟的真的确保一个对象不能谎报它的Type。Eric的回答具体如下:Theframeworkdesignersarenotgoingtoaddanincrediblydangerousfeaturesuchasallowinganobjecttolieaboutitstypemerelytomakeitconsistentwiththreeothermethodsonthesametype.现在的问题是:我能否创建一个对象,使其确
基于几天前在SO中提出的以下问题:GetType()andpolymorphism和阅读EricLippert's回答,我开始考虑如果让GetType()不是虚拟的真的确保一个对象不能谎报它的Type。Eric的回答具体如下:Theframeworkdesignersarenotgoingtoaddanincrediblydangerousfeaturesuchasallowinganobjecttolieaboutitstypemerelytomakeitconsistentwiththreeothermethodsonthesametype.现在的问题是:我能否创建一个对象,使其确
从基类调用时,GetType()会返回最派生的类型吗?例子:publicabstractclassA{privateTypeGetInfo(){returnSystem.Attribute.GetCustomAttributes(this.GetType());}}publicclassB:A{//Fieldsherehavesomecustomattributesaddedtothem}或者我应该像下面这样创建一个派生类必须实现的抽象方法吗?publicabstractclassA{protectedabstractTypeGetSubType();privateTypeGetInf
从基类调用时,GetType()会返回最派生的类型吗?例子:publicabstractclassA{privateTypeGetInfo(){returnSystem.Attribute.GetCustomAttributes(this.GetType());}}publicclassB:A{//Fieldsherehavesomecustomattributesaddedtothem}或者我应该像下面这样创建一个派生类必须实现的抽象方法吗?publicabstractclassA{protectedabstractTypeGetSubType();privateTypeGetInf
我见过很多人使用下面的代码:Typet=typeof(obj1);if(t==typeof(int))//Somecodehere但我知道你也可以这样做:if(obj1.GetType()==typeof(int))//Somecodehere或者这个:if(obj1isint)//Somecodehere就我个人而言,我觉得最后一个是最干净的,但是有什么我想念的吗?哪个最好用,还是个人喜好? 最佳答案 都是不同的。typeof采用类型名称(您在编译时指定)。GetType获取实例的运行时类型。is如果实例在继承树中,则返回true