静态类比静态类有什么优势?静态类比静态类有什么优势?静态类不需要实例化。所以我们可以直接使用ClassName.MemberName,这样就可以使用非静态类了。静态类与非静态类基本相同,但有一点不同:静态类不能被实例化。换句话说,您不能使用new关键字来创建类类型的变量。因为没有实例变量,所以可以使用类名本身访问静态类的成员。一个静态类只有一个类本身的实例,所以你不能创建一个静态类的多个实例。看你的问题,如果类是静态的,你不能为下面的属性设置两个不同的值,因为内存中只有一个ClassName实例ClassName.MemberNameMoreinfohttp://msdn.microsoft.com/en-us/library/79b3xss3.aspx假设您需要存储封装员工的信息和操作。类员工{字符串名称{get;设置;}双HourlyRate{get;设置;}双CalculatePay(inthoursWorked){...现在,假设您的程序需要同时比较两名员工?毕竟!使用非静态雇员类,您可以实例化雇员类的两个(或更多)实例,每个对象代表一个不同的雇员。你不能那样做,员工是静态的。例如voidCompareEmployees(EmployeeempA,EmployeeempB){if(empA.HourlyRateempB.HourlyRate)Console.WriteLine("Employee{0}hasahigherrate{1}",empb.Name,empA.Name);否则控制台。WriteLine("{0}和{1}的费率相同",empb.Name,empA.Name);}将类视为架构蓝图,并将该类(对象)的实例视为根据蓝图建筑中的设计构建。给定一张蓝图,您可以创建许多建筑物。这些建筑每一栋都有相同的结构,但每一栋都是独立的——一个可以开门,另一个可以开门。静态类就像一张蓝图,永远不能用来建造任何房子。你仍然可以做一些事情,比如撕掉它或把咖啡洒在上面,但你永远无法打开蓝图上的门,因为它没有真正的门,只有门的设计。描述这种情况的另一种方式是想到“状态”。建筑物(物体)有一定的状态(例如门是否打开),每个建筑物的状态可以不同(例如自己的门是否打开)。蓝图(类)也可以有(静态)状态(例如咖啡是否洒了),但这与从蓝图建造的建筑物相关联的状态不同。公共课屋{私人静态布尔isCoffeeSpilt;私有布尔值isDoorOpen;publicstaticvoidspillCoffee(){House.isCoffeeSpilt=true;}publicvoidopenDoor(){isDoorOpen=true;}}publicstaticclassProgram{publicstaticvoidmain(String[]args){HouseredHouse=newHouse();//1房子blueHouse=newHouse();//2redHouse.openDoor();//3House.spillCoffee();//4}}在上面的例子中,如果House是一个静态类,则不能使用第1、2和3行。注意spillCoffee是在House的实例上调用的,而spillCoffee是在类上调用的本身。还要注意,在第4行,红房子的门是开着的,但蓝房子的门仍然是关着的。静态类无法实例化(从技术上讲是,但只能实例化一次),静态构造函数“通常”在类第一次被访问时被调用,这很难跟踪和协调。如果你想要一个只收集一些实用方法的类,静态类就很好。.net框架中的数学就是一个很好的例子。它们对于扩展方法也很有用。除此之外,我不使用它们。如果您需要单个实例并且不想受限于静态类所具有的约束,则Singleton模式很有用。关于单例和静态类之间区别的好文章。当然,非静态类必须被实例化,存储在变量中并且可以被多次实例化。示例:一个静态类,只是加载文件的辅助方法:staticclassTextureHelper{publicstaticbyte[]LoadFromFile(stringaFileName);单例是创建纹理的要点。publicsealedclassTextureManager{publicstaticTextureManagerInstance{get;set;}publicTextureCreateTexture();一个实际的纹理,我的应用程序中可能有很多。publicclassTexture{}非静态类的一个优点是静态类对单元测试来说很糟糕——它们不容易被模拟,而且它们不支持接口。以上就是C#学习教程:静态类比静态类有什么优势?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
