本文介绍PowerShell面向对象编程的基础知识,我们知道PowerShell里面的所有变量和输出都是对象,所以有必要在进行PowerShell编程时了解一下面向对象编程的基础知识。
面向对象编程的引入主要是为了解决软件复杂化带来的维护等问题,早在20世纪60年代,面向对象就已经出现了。虽然C语言并不支持面向对象的特性,但是使用C语言进行开发的程序人员已经将面向对象的核心思想应用到其中,因此我们更应该理解的是面向对象的思想,而不需要纠缠于语言本身。
PowerShell是基于对象的脚本语言,因此下面的介绍中我们主要侧重于介绍基本概念,并不会涉及如何进行面向对象编程。通过下面知识的学习,你将会了解PowerShell中需要掌握的基本对象知识,从而深刻理解PowerShell采用基于对象的管理带来的优势。
类(Class)
为物体(或者说是对象)定义的抽象特性,这些特性包括物体的特征(它的属性、域或特性)以及物体的行为(它可以做得事情、方法或操作)。某些人会说类就像是设计图或工厂一样,用来描述某些事物的自然特性。打个比方来说,狗这个类可能包含所有狗包含的共性,例如:品种和皮毛颜色(它们都是狗的特征)、叫和坐下(它们都是狗的行为)。
对象(Object)
类的特定实例(Instance)。解释很抽象?对象可以看做是你家的狗,或者你家邻居的狗。无论如何,它们都是狗类的实例。狗类定义一部分所有狗都具有的特性,例如:三条(显然狗主人很喜欢打麻将)是一只真实存在的狗,狗类中的信息就可以用来描述三条与其他狗的不同,三条的皮毛是棕色的。我们可以知道三条被归类为犬科,是狗类的一个实例。
方法(Method)
对象的能力。三条是一条狗,它能够叫,因此叫就是三条的方法。三条也许还有其他的方法,例如:原地转圈、作揖、坐下等等。
继承 (Inheritance)
子类是一个类的特殊版本,它继承父类的属性和行为,并引入自己特有的属性和行为。
我们还是回到前面的例子讨论,狗按照品种划分有很多种,例如:黄金牧羊犬、柯利牧羊犬和吉娃娃。三条是柯利牧羊犬的实例,例如狗类中已经定了了方法叫和属性皮毛颜色。所以每一个狗类的子类都可以直接继承这些信息,不需要额外重新定义这些冗余的信息。
子类可以改变继承的特性。例如:柯利牧羊犬可能指定默认的皮毛颜色为棕色和白色。而吉娃娃子类可能默认指定方法“叫”是产生高音调的叫声。子类还允许引入新成员,例如吉娃娃子类可能引入方法“颤抖”(吉娃娃的胆子很小,所以遇到危险就会颤抖)。吉娃娃对象还有一个颤抖的方法,但是三条没有,这是因为三条是柯利牧羊犬,而不是吉娃娃。
对于类和对象而言,我们在PowerShell开发时,更多的关注它的成员,即类的属性和方法。PowerShell中的类和C#一样,有静态成员和实例成员两种。下面分别演示一下:
我们可以通过Get-Member的Static参数来列出类型的静态成员:
PS C:\user\splaybow> [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:\Users\splaybow> [int]::MaxValue
2147483647
PS C:\Users\splaybow> [int]::MinValue
-2147483648
如果没有指定Static参数,那么Get-Member会显示对象的实例方法:
PS C:\Users\splaybow> [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...
关于PowerShell面向对象编程基础知识,本文就介绍这么多,希望对您有所帮助,谢谢!