支持枚举定义,类定义\类继承\接口继承,不支持接口定义\泛型类定义\泛型函数定义,但是作为shell脚本已经相当让人惊喜了, 基本逻辑可以直接套用C#语法格式

# enum_sample/main.ps1

enum TestEnum
{
None = 0
Hello = 1
World = 2
} [Flags()] enum TestFlags
{
None = 0
Read = 1
Write = 2
} # 声明的时候加类型就会有类型检查
[TestEnum] $a = [TestEnum]::Hello;
# 或者 Write-Output $a
[System.Console]::WriteLine($a);
[System.Console]::WriteLine($a -eq 1);
[System.Console]::WriteLine("===");
[TestFlags] $b = [TestFlags]::Read + [TestFlags]::Write;
[System.Console]::WriteLine($b);
[System.Console]::WriteLine($b.HasFlag([TestFlags]::Read));

输出结果

Hello
True
===
Read, Write
True
# class_sample/TestClass.psm1

class TestClass
{
[int] $id = 0;
[string] $name = ""; TestClass([int] $id, [string] $name)
{
$this.id = $id;
$this.name = $name;
} [string] ToString()
{
return [string]::Format("id: {0}, name: {1}", $this.id, $this.name);
}
}
# class_sample/main.ps1

# 使用另一个文件定义的类, 注意这里要写相对于文件的相对路径
Using module "./TestClass.psm1" # 继承自定义类
class TestClassB : TestClass
{
[string] $extraValue = ""; TestClassB([int] $id, [string] $name, [string] $extraValue) : base($id, $name)
{
$this.extraValue = $extraValue;
} #override
[string] ToString()
{
return [string]::Format("id: {0}, name: {1}, extraValue: {2}", $this.id, $this.name, $this.extraValue);
} [string] ToStringEx()
{
return [string]::Format("id: {0}, name: {1}, extraValue: {2}", $this.id, $this.name, $this.extraValue);
}
} # 继承系统类
class TestClassC : System.IComparable
{
[int] $value; TestClassC([int] $value)
{
$this.value = $value;
} [int] CompareTo([object] $other)
{
return $this.value - $other.value;
}
} [TestClass] $a = [TestClass]::new(123, "tom");
[System.Console]::WriteLine($a.ToString()); [TestClass] $b = [TestClassB]::new(123, "jerry", "mouse")
[System.Console]::WriteLine($b.ToString());
# 这里不转类型也行, 有点可惜
# [System.Console]::WriteLine($b.ToStringEx());
[System.Console]::WriteLine(([TestClassB])$b.ToStringEx()); [TestClassC] $c1 = [TestClassC]::new(1)
[TestClassC] $c2 = [TestClassC]::new(2)
[System.Console]::WriteLine($c1 -gt $c2);

输出结果

id: 123, name: tom
id: 123, name: jerry, extraValue: mouse
id: 123, name: jerry, extraValue: mouse
False

powershell 7 初体验的更多相关文章

  1. Flume日志采集系统——初体验(Logstash对比版)

    这两天看了一下Flume的开发文档,并且体验了下Flume的使用. 本文就从如下的几个方面讲述下我的使用心得: 初体验--与Logstash的对比 安装部署 启动教程 参数与实例分析 Flume初体验 ...

  2. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  3. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  4. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  5. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  6. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  7. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  8. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  9. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  10. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

随机推荐

  1. 深入解析Redis的LRU与LFU算法实现

    作者:vivo 互联网服务器团队 - Luo Jianxin 重点介绍了Redis的LRU与LFU算法实现,并分析总结了两种算法的实现效果以及存在的问题. 一.前言 Redis是一款基于内存的高性能N ...

  2. Hexo博客Next6.0版本主题配置(站内搜索、新建404界面、静态资源压缩、底部信息隐藏、各版块透明度修改、字数统计、推荐阅读、博文置顶、阅读进度、在线评论、运行时间)

    新建404界面 在站点根目录下,输入hexo new page 404,在默认Hexo站点下/source/404/index.md 打开新建的404界面,编辑属于自己的404界面,可以显示腾讯公益4 ...

  3. 《架构整洁之道》学习笔记 Part 2 编程范式

    计算机编程发展至今,一共只有三个编程范式: 结构化编程 面向对象编程 函数式编程 编程范式和软件架构的关系 结构化编程是各个模块的算法实现基础 多态(面向对象编程)是跨越架构边界的手段 函数式编程是规 ...

  4. Ui2Code+ChatGPT助力低代码搭建

    前言 低代码开发平台(LCDP),是低代码或无代码通过快速搭建配置的方式完成一个应用程序的开发与上线,可视化低代码就是可视化的DSL,它的优点更多的是来源可视化,相对的,它的局限性也还是来源于可视化, ...

  5. Centos7中Oracle占用CPU过高(解决方案)

    Centos7中Oracle占用CPU过高(解决方案) 前言: 99%的问题几乎都是SQL的问题,一般SQL可能会出现以下几种情况: 相关SQL搜索条件没有加索引 索引失效 联合查询过多 数据量过大 ...

  6. 使用wsl 清理windows 下的C盘

    大文件删除思路 ## 在wsl 中可以看到,C盘已经挂载了,挂载点为/mnt/c dewan@wsl ~% df /mnt/c Filesystem Size Used Avail Use% Moun ...

  7. IRF技术介绍及配置介绍

    IRF技术介绍及配置介绍 IRF(Intelligent Resilient Framework,智能弹性架构)是 H3C 自主研发的软件虚拟化技术. 它的核心思想是将多台设备通过 IRF 物理端口连 ...

  8. C# DateTime 时间格式化

    今天做任务的时候,数据库日期拼写需要 从凌晨到晚上最后一秒,但是传过来的日期数据是 当前的时间,下面是我尝试的解决方案. endTime.ToString("yyyy-MM-dd 23:59 ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (67)-- 算法导论6.5 6题

    文心一言 VS 讯飞星火 VS chatgpt (67)-- 算法导论6.5 6题 六.在 HEAP-INCREASE-KEY 的第 5 行的交换操作中,一般需要通过三次赋值来完成.想一想如何利用IN ...

  10. 【技术积累】Linux中的命令行【理论篇】【五】

    arpd命令 命令介绍 arpd命令是Linux系统中的一个网络工具,用于管理和操作ARP(地址解析协议)缓存.ARP协议用于将IP地址映射到MAC地址,以便在局域网中进行通信. 命令说明 arpd命 ...