我想知道仅使用静态方法创建类的原因,例如Console
或Convert
类.我能想到的唯一原因是将相关函数组合在一起,所以这与命名空间有何不同.
根据MSDN
" 一个类可以声明为static,表示它只包含静态成员.不可能使用new关键字创建静态类的实例.静态类由.NET Framework公共语言运行时(CLR)自动加载当加载包含该类的程序或命名空间时. "
在对它进行一些研究之后,我发现静态类不包含实例构造函数.我不明白为什么静态类不包含实例构造函数以及static关键字的用途.为什么.Net不允许我们创建静态类的实例?
如果你有一个Point3
类并且有一个方法被调用Distance
,你应该像这样静态:
Point3.Distance ( p1, p2 );
Run Code Online (Sandbox Code Playgroud)
或者类似的实例方法:
this.Distance ( p );
Run Code Online (Sandbox Code Playgroud)
我意识到使用静态方法阻碍了继承和覆盖,对吧?
哪一个更好,为什么?
假设我有一个像这样的方法:
public class MyDataAccess
{
public static StudentDataTable GetStudentRecords(int schoolID)
{
var ta = new StudentTableAdapter();
using (ta.Connection = new SqlConnection(GetCS()))
{
var result = ta.GetStudentRecords(schoolID);
return result;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果使用控制台应用程序或任何其他方式一次访问此方法1,000次,是否有可能将一个学校的学生的记录返回到另一所学校?
例如
var records1 = GetStudentRecords(1);
.....
var records1000 = GetStudentRecords(1000);
Run Code Online (Sandbox Code Playgroud)
records1
变量是否有可能获得schoolID = 1
混合记录的记录records1000
,即使它们来自自己的线程?
如果我将这个类改为静态会发生什么呢?
我在这一点上的理解
1)是的,我明白课程是什么
2)是的,我知道静态类不需要使用所需的实例
3)我知道应该有简单的静态代码,例如转换数据类型.
但我感到困惑的是:
当存在单个静态类并且有一百万个对象试图访问STACK中的同一对象时会发生什么
特别是当它是一个dataAccess
类或一个访问activeDirectory
对象的类时.
我在程序员SE聊天室聊了聊.他们没有明确地说出来,但我得到的印象是永远不要使用静态类来查询例如sql,活动目录等.而且静态类应该仅限于简单的静态代码 - 不需要查询.