Resharper喜欢指出每个asp.net页面可以静态化的多个函数.如果我让它们静止,对我有帮助吗?我应该将它们设置为静态并将它们移动到实用程序类吗?
我已经阅读了关于这个主题的其他几个问题(这里,这里,这里),但还没有看到一个很好的答案.我之前已经开发了我公平的数据访问层,并且个人更喜欢使用实例类而不是静态类.但是,它更多的是个人偏好(我喜欢测试我的业务对象,这种方法可以更容易地模拟DAL).我之前使用静态类来访问数据库,但我总是觉得这种设计的适当性有点不安全(特别是在ASP.NET环境中).
任何人都可以提供一些关于这两种方法的优点/缺点,特别是在ASP.NET应用程序中使用ADO.NET提供程序(无ORM)开发数据访问类.如果您有更一般的静态与实例类技巧,请随意加入.
特别是,我担心的问题是:
谢谢!
我对静态类和静态方法有疑问.从MSDN我理解"静态类和类成员用于创建可以在不创建类实例的情况下访问的数据和函数."
因此,如果我们不想将一个类与一个实例相关联,我们将把它作为静态.这是唯一的优势吗?任何人都可以指导我在静态类的实时场景.
类中的一些时间(不是静态的)我发现了静态方法.静态方法在实际中为实例提供了多少优势/性能优势.
我是TDD和DDD的新手,我有一个关于静态方法的简单问题.TDD的大多数专家用一句话说静态方法是坏的(我们应该忘记创建大量的静态实用程序,我们(或我)以前用过它们是不可测试的.我可以看出为什么它们是不可测试(这里可以找到一个很棒的澄清文章,对于那些感兴趣的人,但我想我是这里唯一的菜鸟:()但是我想知道从TDD角度来看使用静态有一个很好的干净指南吗?
对于大多数人来说,这可能是一个非常愚蠢的问题,但是一些提示会很棒,我只想知道这里的专家如何看待静态的东西.提前致谢.
编辑:在寻找答案的过程中,我找到了2个关于静态使用的其他好线程(虽然不是TDD关注),我觉得对于那些感兴趣的人(我自己也包括在内)很好.
我发现有两种类型的方法称为静态方法和实例方法及其差异.但我仍然无法理解一个人的优势.
有时我觉得静态方法不是100%面向对象的.
这两者之间是否有任何性能差异.
有人可以帮忙吗?
static int _i;
static void Display()
{
//operates on _i;
}
Run Code Online (Sandbox Code Playgroud)
和
static int _i;
void Display()
{
//operates on _i;
}
Run Code Online (Sandbox Code Playgroud)
哪些方案特定于方法的静态 - 非静态问题?
编辑; 注意:这个问题不是关于静态和非静态方法之间的差异,正如许多人似乎回答的那样.问题是我应该担心差异的情景/用例是什么.为清楚起见,请参阅@ ziesemer的答案,它似乎正好解决了这个问题.
如果这个问题看起来很简单,请原谅我 - 我正在查看一些看起来相当不错的源代码,但它提出了一些问题......
如果给定的类没有成员数据 - 即它不维护任何类型的状态,那么将该类标记为静态方法的静态类是否有任何好处?
没有标记不保持静态状态的方法有什么好处吗?
谢谢!
编辑:由于有人提出它,我正在看的代码是用c#编写的.
我真的很喜欢使用静态方法(特别是对于helpers类).但是由于静态方法不是顽固的,最终它们是一种不好的做法,不是吗?所以我必须在静态方法使用方便性和可测试性之间做出选择.有任何妥协吗?
在过去一年左右的时间里,我一直认为如果一个方法可以是静态的,那么为了使它成为静态的,因为这可以带来性能上的好处,因此我在应用程序中最终得到了一些静态类.
我已经了解到,性能优势通常不够大,不值得,而且可以使静态方法的区别,也许不应该从设计的角度来看,如果它们更加特定于对象,那么而不是类型相关的问题
作为一个例子,我最近创建了一个FileRepository类,它实现了我们自己的File类的存储库模式(例如导入文件).此类不是静态的,必须先创建存储库对象,然后才能访问它.
我的问题是,所有我的旧静态调用,现在是2行(除非我可以在本地范围内重用该对象).存储库对象(尚未)没有状态,因为它通过线程静态变量使用数据库访问.
我的问题是,人们对在类上拥有线程静态Current属性的看法是什么,get访问器在第一次调用时初始化对象?据我了解,这仍然可以避免静态类的缺陷,例如无法通过接口实现通用功能,但仍然提供对存储库对象的单行调用的简易性?
只是试着调整我的做法和思维方式.
c# ×7
.net ×3
static ×3
asp.net ×1
class-design ×1
instance ×1
refactoring ×1
resharper ×1
state ×1
tdd ×1