C#学习教程:C#类可以有多少种方法分享


C#类可以有多少种方法

C#类可以拥有的属性数量是否有限制?

我快速浏览标准ECMA-334并没有找到任何相关信息。

在进入为什么一个有很多方法的课程设计不好之前,我想更明确一下这个意图。 当然,我不会手动编写一个包含大量方法的类。 我问这个的原因是我需要通过代码生成大量的执行单元。 我讨论的是具有单个方法的多个类或具有多个方法的一个大类。

所以对于这个问题,我只是有兴趣,如果有一个限制,属性数量,方法的限制是什么。

每种方法每组装1670万(不是等级)。

我不知道C#类可以有多少方法,但我知道当你考虑它时,你肯定做错了什么。

如果有一个限制(我怀疑)它是如此之高,你不会超过它。 除了你有一个非常糟糕的课程设计。

看到反模式“上帝的对象” 。

更新

虽然我仍然不知道你想要实现什么,但我仍然认为你应该用很少的方法创建很多类,原因如下:

在当前的CLR实现中,正确的答案是ushort.MaxValue – 15 。 这可以测试如下:

AppDomain appDomain = AppDomain.CurrentDomain; AssemblyName aname = new AssemblyName ("MyDynamicAssembly"); AssemblyBuilder assemBuilder = appDomain.DefineDynamicAssembly (aname, AssemblyBuilderAccess.Run); ModuleBuilder modBuilder = assemBuilder.DefineDynamicModule ("DynModule"); TypeBuilder tb = modBuilder.DefineType ("Widget", TypeAttributes.Public); for (int i = 0; i < ushort.MaxValue - 15; i++) { MethodBuilder methBuilder = tb.DefineMethod ("SayHello" + i, MethodAttributes.Public, null, null); ILGenerator gen = methBuilder.GetILGenerator(); gen.EmitWriteLine ("Hello world"); gen.Emit (OpCodes.Ret); } Type t = tb.CreateType(); object o = Activator.CreateInstance (t); 

如果您使用Reflection.Emit创建一个类型化的DataContext来支持数据库(如LINQPad那样),则问题是相关的。 有了足够的存储过程,您就可以达到此限制!

Type.GetMethods方法返回一个必须用整数索引的数组,所以我想说每个类不能超过int.MaxValue方法。

看看这个: https : //softwareengineering.stackexchange.com/questions/193295/implications-of-a-large-partial-class/193304?noredirect=1#193304

实际上有人经历了尽可能多的方法生成一个类的痛苦

比你想要的更多。

是…

它叫做常识。 尽量不要超载一个类,它很可能违反单一责任原则,没有人能够理解它。

毕竟,一堂课“只是为了帮助开发人员,他们不能同时将7个以上的信息融入他的短期记忆中”(是的,我知道这是一个危险的陈述)

我不这么认为。 但是,遵循和考虑的良好软件开发实践和指南自然应该限制一个类具有意义和绝对必要性的属性和方法的数量。 这些做法包括SOLID,KISS(保持简单),DRY(不要重复自己),组合,重构,inheritance等。

我有一个自动代码生成工具,我目前达到~5K(工作)和10K之间的限制,失败了

 System.TypeLoadException: Type '' from assembly ', Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' contains more methods than the current implementation allows. 

所以这与它是“无限的”的说法相矛盾。

上述就是C#学习教程:C#类可以有多少种方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031639.html

发表评论

邮箱地址不会被公开。 必填项已用*标注