我还是C#的新手,所以请在这里忍受。

如果我想只用2个参数运行一个简单的算法,那么用其他语言,我只需在main()之外创建一个函数。 相反,在C#中,显然我需要创建一个类并将函数(方法)放入该类中,并使该方法静态化,以便为运行时进行编码,而不必创建该类的实际对象,对吗?

如果这一切都是正确的,那么由于您正在创建对某事物的引用,这是否会造成很多开销?

===============>>#1 票数:6

在c#中,它们称为方法 ,而不是函数。

但是可以,如果您不想创建一个新类,而只是直接从Main()中调用一个方法,则可以在与Main相同的类中创建一个静态方法,然后从中调用它。

就开销而言,除非您正在构建某种设备驱动程序,否则我认为您不应该花费太多时间为此担心。

===============>>#2 票数:3

无需创建其他类,您的主要方法是Application类中的静态方法。 您可以将一个方法添加到此类并从main调用它,但是该方法也必须是静态的。

如果要利用面向对象的功能(例如成员变量),则需要创建一个类。 此类应具有一个方法,并且不必是静态的。

静态方法不包含任何对象创建开销,它们只是函数调用。 函数有一些开销(静态或非静态),因为它们必须将对象压入堆栈,并在退出时将其弹出。 但是,这种开销通常很小,并且仅在需要最佳性能的非常紧密的循环中才有意义。

通常,除非它对您的应用程序至关重要,否则您不必担心。

===============>>#3 票数:2

1)但是在C#中,我需要创建一个类,并将函数(方法)显然放在其中,并使它静态。

对,那是正确的。

2)使其为静态,以便为运行时进行编码,而不必创建该类的实际对象,对吗?

不,不是。 在这种情况下,“静态”仅表示“类范围:独立于任何特定类实例”(“类实例” ==“实例化对象”)。

3)这不会增加开销,因为您正在创建对某事物的引用?

不。 程序中的所有内容都存在。 在C#中,该“某处”总是总是恰好在一个或多个“类”之内。 并且您使用的所有内容都有一个“引用”(相当于一个“地址”)。 您绝对不会创建任何“额外”的东西,并且肯定不会存在“运行时损失”。

希望有帮助...至少有一点... :)

===============>>#4 票数:1

除非编写非常小的程序,否则始终将必须使用多个类(是否为静态类)。 我敦促您以结构合理,易于理解和简洁的编程风格为目标,而不是在这里和那里节省一纳秒的时间。

===============>>#5 票数:0

您的其他语言也有参考。 也许他们只是对你隐瞒了。

拥有静态方法实际上可以消耗更少的资源,因为该方法是附加到类上的,而不是附加到堆上的对象实例的。 因此,类加载器将只有一种方法放入内存。

  ask by aurelie tass translate from so

未解决问题?本站智能推荐:

4回复

在linq foreach中调用方法 - 有多少开销?

我正在考虑用Linq替换很多内联的foreach,这样做会产生新的方法,例如Current: 理念: 显然,Method()包含Statement1..3 这是一种好的做法还是数千次调用方法会降低性能? 我的名单有10,000-100,000个元素。
3回复

在c#中创建新SqlConnection的开销

前段时间我为.net应用程序编写了一个ORM层,其中所有数据库行都由DatabaseRecord的子类表示。 有许多方法,如Load() , Save()等。在我的初始实现中,我在DatabaseRecord的构造函数中创建了与DB的连接,例如 然后我在访问数据库的方法的开头和结尾处调
1回复

测试C#方法,涉及SQL

我在这里有一种为家庭作业创建的方法。 我相信它可以工作,并且我想对其进行测试。 所以这是方法: 现在是测试代码: 给我一个问题的唯一问题是在参数中插入数据。 这给我一个错误,说MovieLibrary.Personnel是一个类型,不属于该类型。
3回复

用C#创建模板系统会涉及什么

我正在用C#创建一个项目,并且希望能够定义“模板”文件,这些文件定义将在ASP网页中生成的布局。 这意味着人们可以通过界面单击某些“区域”并添加文本,图像或视频。 我只能想到使用坐标来实现这一点。 还有更好的方法吗? 任何提示都是好的。
2回复

如何在C#中测试涉及字符串的方法

我有一个应用程序,可让您添加学生和讲师的详细信息,进行搜索并显示它们,等等。这是用于大学作业的,我必须测试自己创建的五种方法。 首先,我不确定如何测试涉及字符串的方法,因为我看到的所有测试方法都涉及一个银行帐户应用程序,并且测试提款和存款方法似乎很容易,因为您只需要加上和减去数字即可。 我完
3回复

如何在c#中创建涉及集合的单元测试?

我在C#中有许多方法可以返回我希望测试的各种集合。 我想尽可能少地使用测试API - 性能并不重要。 一个典型的例子是: // ... 我必须根据集合是否是数组,列表,ICollections等来编写许多签名。是否存在简化此操作的转换(例如,将数组转换为Set?)。 我
2回复

避免C#JIT开销

是否有一种简单的方法可以预先JIT编写C#代码,而不是等待第一次调用代码? 我读过NGEN,但我认为这不会对我有所帮助。 我的应用程序等待并响应来自UDP端口的特定外部事件,并且没有关键路径代码(a)在事件到达之前运行,或者(b)再次运行,因此JIT的成本很高在这种情况下。 使用ANT
1回复

基类中的非虚拟C#方法是否还会产生vtable开销?

考虑到为最大性能而编写的C#,我们可以通过两种方式使用基类方法(注意:在这里,我们谈论的是无状态类,没有字段,只有方法): 实例类A为类B的继承/扩展提供了基础-通常的模式 具有“扩展器” B类静态调用的静态方法(纯函数)的静态A类 我喜欢选项A,因为它使关系更加清晰。
1回复

如何减少OpenCL / Cloo(C#)缓冲区创建的开销?

我正在通过C#Cloo界面使用OpenCL,当我试图让它在我们的产品中运行良好时,我遇到了一些非常令人沮丧的问题。 我们的产品是一款计算机视觉产品,每秒三十秒,从我们的相机中获得512x424像素值网格,而不会给予太多影响。 我们希望对这些像素进行计算,以生成相对于场景中某些对象的点云。
2回复

如何在C#中正确避免线程创建开销/重用线程

假设我有以下循环应该尽可能快地执行: 使用以下规则:B()只能在A()完成后启动,C()只能在B()完成后启动。 B()很有可能是多线程的。 如果我在B()中创建新线程来分割工作,那么与非并行解决方案相比,它执行得更慢! 我想这是线程创建开销。 我创建了一个变体,其中