静态类比静态类有什么优势?
静态类比静态类有什么优势?
静态类不需要实例化。 所以我们可以直接使用ClassName.MemberName
,这样就可以使用非静态类了
静态类与非静态类基本相同,但有一个区别:静态类无法实例化。 换句话说,您不能使用new关键字来创建类类型的变量。 因为没有实例变量,所以可以使用类名本身访问静态类的成员
静态类只有一个类本身的实例,因此您无法创建静态类的多个实例。
看看你的问题,如果类是静态的,你不能为下面的属性设置两个不同的值,因为在内存中只有一个ClassName
实例
ClassName.MemberName
更多信息
https://msdn.microsoft.com/en-us/library/79b3xss3.aspx
假设您需要存储封装员工的信息和操作。
class Employee { string Name {get; set;} double HourlyRate {get; set;} double CalculatePay(int hoursWorked) { . . . } }
现在,假设你的程序需要同时比较两个员工?
究竟! 使用非静态员工类,您可以实例化Employee类的两个(或更多) 实例 ,每个对象代表不同的Employee。
你无法做到这一点,员工是静态的。
例如
void CompareEmployees(Employee empA, Employee empB) { if(empA.HourlyRate < empB.HourlyRate) Console.WriteLine("Employee {0} has a higher rate than {1}", empA.Name, empB.Name); else if(empA.HourlyRate > empB.HourlyRate) Console.WriteLine("Employee {0} has a higher rate {1}", empb.Name, empA.Name); else Console.WriteLine("{0} and {1} have the same rate", empb.Name, empA.Name); }
将类视为建筑蓝图,将该类(对象)的实例视为根据蓝图中的设计构建的建筑物。
给定一个蓝图,您可以创建许多建筑物。 这些建筑物中的每一个都具有相同的结构,但每个都是独立的 – 一个可以打开门,另一个可以打开门。
静态类就像是一个永远无法用于构建任何房屋的蓝图。 你仍然可以做一些事情,比如把它撕掉或者把咖啡洒在上面,但你永远不能打开蓝图上的门,因为它没有真正的门,只有门的设计。
描述这种情况的另一种方式是考虑“状态”。 建筑物(物体)具有某种状态(例如,门是否打开),并且每个建筑物的状态可以是不同的(例如,它自己的门是否打开)。 蓝图(类)也可以具有(静态)状态(例如,咖啡是否已经溢出),但这与根据蓝图建造的建筑物相关联的状态是不同的。
public class House { private static boolean isCoffeeSpilt; private boolean isDoorOpen; public static void spillCoffee() { House.isCoffeeSpilt = true; } public void openDoor() { isDoorOpen = true; } } public static class Program { public static void main(String[] args) { House redHouse = new House(); // 1 House blueHouse = new House(); // 2 redHouse.openDoor(); // 3 House.spillCoffee(); // 4 } }
在上面的示例中,如果House
是静态类,则不可能使用第1,2和3行。 请注意,在House
的实例上调用spillCoffee
,而在类本身上调用spillCoffee
。 另请注意,在第4行的位置,红房子的门是打开的,但是蓝色房子的门仍然关闭。
静态类不能被实例化(技术上它是,但只有一次),并且静态构造函数在第一次访问类时“通常”被调用,这很难跟踪和协调。 如果你想要一个只收集一些实用方法的类,静态类就很好。 .net框架中的数学就是一个很好的例子。 它们对扩展方法也很有用。 除此之外,我不使用它们。
如果您需要单个实例,并且不希望绑定到静态类具有的约束,则Singleton模式非常有用。 关于单身人士和静态课程之间差异的好文章 。
当然,非静态类必须是实例化的,存储在变量中并且可以多次实例化。
例:
一个静态类,只是用于加载文件的辅助方法:
static class TextureHelper { public static byte[] LoadFromFile(string aFileName); }
Singleton是创建纹理的主要点。
public sealed class TextureManager { public static TextureManager Instance{get;set;} public Texture CreateTexture(); }
一个实际的纹理,我可能在我的应用程序中有很多。
public class Texture { }
非静态类的一个优点是静态类对unit testing来说很糟糕 – 它们不容易被模拟,并且它们不支持接口。
上述就是C#学习教程:静态类比静态类有什么优势?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1028022.html