在创建具有内部私有方法的类时,通常为了减少代码重复,不需要使用任何实例字段,将方法声明为静态是否具有性能或内存优势?
例:
foreach (XmlElement element in xmlDoc.DocumentElement.SelectNodes("sample"))
{
string first = GetInnerXml(element, ".//first");
string second = GetInnerXml(element, ".//second");
string third = GetInnerXml(element, ".//third");
}
Run Code Online (Sandbox Code Playgroud)
...
private static string GetInnerXml(XmlElement element, string nodeName)
{
return GetInnerXml(element, nodeName, null);
}
private static string GetInnerXml(XmlElement element, string nodeName, string defaultValue)
{
XmlNode node = element.SelectSingleNode(nodeName);
return node == null ? defaultValue : node.InnerXml;
}
Run Code Online (Sandbox Code Playgroud)
将GetInnerXml()方法声明为静态是否有任何优势?没有意见回复,我有意见.
我的问题涉及静态方法与实例方法的性能特征及其可伸缩性.假设在这种情况下,所有类定义都在一个程序集中,并且需要多个离散指针类型.
考虑:
public sealed class InstanceClass
{
public int DoOperation1(string input)
{
// Some operation.
}
public int DoOperation2(string input)
{
// Some operation.
}
// … more instance methods.
}
public static class StaticClass
{
public static int DoOperation1(string input)
{
// Some operation.
}
public static int DoOperation2(string input)
{
// Some operation.
}
// … more static methods.
}
Run Code Online (Sandbox Code Playgroud)
上述类表示辅助样式模式.
在实例类中,解析实例方法需要花费一些时间来与StaticClass相反.
我的问题是:
保持状态不是问题(不需要字段或属性),使用静态类总是更好吗?
如果有相当多的静态类定义(例如100,每个都有许多静态方法),与相同数量的实例类定义相比,这会对执行性能或内存消耗产生负面影响吗?
当调用同一实例类中的另一个方法时,实例解析是否仍然发生?例如,使用[this]关键字,例如this.DoOperation2("abc")
来自DoOperation1
同一实例.
C#方法可以是静态的吗?
我们今天正在讨论这个问题,我有点蠢蠢欲动.想象一下,你有一个很长的方法,你可以重构几行.新方法可能从父方法中获取一些局部变量并返回一个值.这意味着它可能是静态的.
问题是:它应该是静态的吗?它不是设计或选择的静态,仅仅是因为它不引用任何实例值.
我最近在Eclipse中查看了我的警告并遇到了这个问题:
如果方法可以声明为static,它将给出编译器警告.
[edit] Eclipse帮助中的确切引用,对私有和最终的压力:
启用后,编译器将对private或final方法发出错误或警告,并且仅引用静态成员.
是的我知道我可以关掉它,但我想知道打开它的原因?
为什么将每个方法声明为静态是一件好事?
这会带来任何性能优势吗?(在移动领域)
指出一个方法为静态,我想是显示你不使用任何实例变量因此可以移动到utils样式类?
在一天结束时,我应该关闭它"忽略"或者我应该修复它给我的100多个警告吗?
你认为这只是污染代码的额外关键字,因为编译器无论如何只会内联这些方法吗?(有点像你没有声明每个变量你可以最终但你可以).
为什么ReSharper会在方法变为静态时抱怨,但不是?
是因为只创建了静态方法的一个实例(在类型上),从而节省了性能?
我有静态变量的概念,但静态方法在类中有什么好处.我曾经参与过一些项目,但我并没有将方法设为静态.每当我需要调用类的方法时,我创建该类的对象并调用所需的方法.
问:方法中的静态变量即使在执行方法时仍保持其值,但只能在其包含的方法中访问,但静态方法的最佳定义是什么?
问:调用静态方法而不创建该类的对象是静态方法的唯一好处吗?
问:静态方法的可访问范围是多少?
谢谢
我冒这个冒险,这可能是一个新问题但是这里有.我很想将一个方法添加到一个类中,该类可能在给定时间内有数千个实例存储在内存中.现在,另一个选择是使用静态方法创建静态类,并在那里创建[静态]方法,而不是在类中创建实例方法.像这样的东西:
这个:
public static class PetOwner
{
public static void RenamePet(Pet pet, string newName)
{
pet.Name = newName;
}
}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
public class Pet
{
public string Name { get; set; }
public void Rename(string newName)
{
this.Name = newName;
}
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道静态类替代是否会占用更少的内存.
谢谢!
有没有最好的做法让类静态的私有方法?我有一个有几种方法的课.其中一些很容易变得静态,因为它们只是处理数据.
我应该让它们静止还是只是保持原样?这更像是一种风格问题吗?有性能考虑吗?
编辑: 方法可以做成静态,但应该吗?
我对静态类和静态方法有疑问.从MSDN我理解"静态类和类成员用于创建可以在不创建类实例的情况下访问的数据和函数."
因此,如果我们不想将一个类与一个实例相关联,我们将把它作为静态.这是唯一的优势吗?任何人都可以指导我在静态类的实时场景.
类中的一些时间(不是静态的)我发现了静态方法.静态方法在实际中为实例提供了多少优势/性能优势.
我是TDD和DDD的新手,我有一个关于静态方法的简单问题.TDD的大多数专家用一句话说静态方法是坏的(我们应该忘记创建大量的静态实用程序,我们(或我)以前用过它们是不可测试的.我可以看出为什么它们是不可测试(这里可以找到一个很棒的澄清文章,对于那些感兴趣的人,但我想我是这里唯一的菜鸟:()但是我想知道从TDD角度来看使用静态有一个很好的干净指南吗?
对于大多数人来说,这可能是一个非常愚蠢的问题,但是一些提示会很棒,我只想知道这里的专家如何看待静态的东西.提前致谢.
编辑:在寻找答案的过程中,我找到了2个关于静态使用的其他好线程(虽然不是TDD关注),我觉得对于那些感兴趣的人(我自己也包括在内)很好.
c# ×7
static ×3
.net ×2
coding-style ×2
performance ×2
asp.net ×1
il ×1
java ×1
methods ×1
oop ×1
optimization ×1
resharper ×1
tdd ×1