Powershell是基于对象的脚本语言,本节我们主要侧重于介绍基本概念,并不会涉及如何进行面向对象编程。
通过下面知识的学习,你将会了解powershell中需要掌握的基本对象知识,从而深刻理解PowerShell采用基于对象的管理带来的优势。
类(Class)
为物体(或者说是对象)定义的抽象特性,这些特性包括物体的特征(它的属性、域或特性)以及物体的行为(它可以做得事情、方法或操作)。某些人会说类就像是设计图或工厂一样,用来描述某些事物的自然特性。打个比方来说,狗这个类可能包含所有狗包含的共性,例如:品种和皮毛颜色(它们都是狗的特征)、叫和坐下(它们都是狗的行为)。
对象(Object)
类的特定实例(Instance)。解释很抽象?对象可以看做是你家的狗,或者你家邻居的狗。无论如何,它们都是狗类的实例。狗类定义一部分所有狗都具有的特性,例如:三条(显然狗主人很喜欢打麻将)是一只真实存在的狗,狗类中的信息就可以用来描述三条与其他狗的不同,三条的皮毛是棕色的。我们可以知道三条被归类为犬科,是狗类的一个实例。
方法(Method)
对象的能力。三条是一条狗,它能够叫,因此叫就是三条的方法。三条也许还有其他的方法,例如:原地转圈、作揖、坐下等等。
继承 (Inheritance)
子类是一个类的特殊版本,它继承父类的属性和行为,并引入自己特有的属性和行为。
我们还是回到前面的例子讨论,狗按照品种划分有很多种,例如:黄金牧羊犬、柯利牧羊犬和吉娃娃。三条是柯利牧羊犬的实例,例如狗类中已经定了了方法叫和属性皮毛颜色。所以每一个狗类的子类都可以直接继承这些信息,不需要额外重新定义这些冗余的信息
子类可以改变继承的特性。例如:柯利牧羊犬可能指定默认的皮毛颜色为棕色和白色。而吉娃娃子类可能默认指定方法“叫”是产生高音调的叫声。子类还允许引入新成员,例如吉娃娃子类可能引入方法“颤抖”(吉娃娃的胆子很小,所以遇到危险就会颤抖)。吉娃娃对象还有一个颤抖的方法,但是三条没有,这是因为三条是柯利牧羊犬,而不是吉娃娃。
我们需要能够简单的理解值类型和引用类型。通俗的来说,占用存储空间的少的对象往往以值类型存在,当需要传递值类型的对象时,实际上是将表示该对象的所有信息都复制了一份。而引用类型往往表示占用存储空间较多的对象,如果在传递引用类型的对象时将其所有信息都进行复制可能会浪费过多的时间,同时还会占用过多的内存空间,因此传递引用类型对象时,如果只拷贝一些能够找到保存这些信息的地址,那么我们无论在传递对象的速度上,还是占用的存储空间上都会得到更好的性能。我们可以想象成引用就是你家的地址,你在告诉别人如何去你家的时候,只需要留下地址即可。你并不需要领着别人到一家一次,才能让别人知道你家的位置。
一个类的静态属性和静态方法可以看做是与RuntimeType关联的成员,因为每个类型只会生成一个RuntimeType,因此它们只会有一个副本。而实例属性和实例方法可以看做是与每个实例关联的成员,因此每个实例维护自己这些信息。
我们可以通过Get-Member的Static参数来列出类型的静态成员:
PS C:Userseden> [int] | Get-Member -Static | Out-String -Width 80
TypeName: System.Int32
Name MemberType Definition
---- ---------- ----------
Equals Method static System.Boolean Equals(Object objA, Object o...
Parse Method static System.Int32 Parse(String s), static System...
ReferenceEquals Method static System.Boolean ReferenceEquals(Object objA,...
TryParse Method static System.Boolean TryParse(String s, Int32& re...
MaxValue Property static System.Int32 MaxValue {get;}
MinValue Property static System.Int32 MinValue {get;}
我们可以看到,System.Int32上有MaxValue和MinValue两个静态属性,它们指示了System.Int32类型的值域:
PS C:UsersEden> [int]::MaxValue
2147483647
PS C:UsersEden> [int]::MinValue
-2147483648
如果没有指定Static参数,那么Get-Member会显示对象的实例方法:
PS C:UsersEden> [int]::MinValue | Get-Member | Out-String -Width 80
TypeName: System.Int32
Name MemberType Definition
---- ---------- ----------
CompareTo Method System.Int32 CompareTo(Int32 value), System.Int32 Comp...
Equals Method System.Boolean Equals(Object obj), System.Boolean Equa...
GetHashCode Method System.Int32 GetHashCode()
GetType Method System.Type GetType()
GetTypeCode Method System.TypeCode GetTypeCode()
ToString Method System.String ToString(), System.String ToString(IForm...