powershell 7 初体验
支持枚举定义,类定义\类继承\接口继承,不支持接口定义\泛型类定义\泛型函数定义,但是作为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 初体验的更多相关文章
- Flume日志采集系统——初体验(Logstash对比版)
这两天看了一下Flume的开发文档,并且体验了下Flume的使用. 本文就从如下的几个方面讲述下我的使用心得: 初体验--与Logstash的对比 安装部署 启动教程 参数与实例分析 Flume初体验 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
随机推荐
- P3047 [USACO12FEB]Nearby Cows G 题解
P3047 [USACO12FEB]Nearby Cows G 题目描述 思路 使用换根DP, 设 \(dp[i][j]\) 表示以 \(i\) 为根节点的子树中深度小于等于 \(j\) 的点的权值之 ...
- 【Java】工具类 -- 持续更新
Java原生工具类 Objects requireNotNull():为空抛异常,不为空返回本身 deepEquals():对象深度相等(数组层面)判断 调用Arrays.deepEquals0() ...
- Redis的设计与实现(3)-字典
Redis 的数据库使用字典实现, 对数据库的增, 删, 查, 改也是构建在对字典的操作之上的. 字典是哈希键的底层实现之一: 当一个哈希键包含的键值对比较多, 又或者键值对中的元素都是比较长的字符串 ...
- FireflySoft.LeaderElection增加基于ZooKeeper的Leader选举
FireflySoft.LeaderElection的第一个版本实现了基于Consul的Leader选举,考虑到ZooKeeper的一个常见用途也是选主,所以此类库把ZooKeeper也集成了进来.并 ...
- Cesium 概述 (二) 空间数据可视化
https://blog.csdn.net/happyduoduo1/article/details/51865811/
- 记录一次解决数据库连接池连接泄露BUG
1 BUG现象 系统并发请求,系统停滞无法使用,所有接口都是无法与后端进行交互的状态,系统并没有宕机 2 BUG的业务流程 插入分数方法 涉及插入表ABCD 加了声明式事务 查询分数方法 涉及表ABC ...
- Linux下后台运行Java程序
1.背景描述 用Java编写了一个程序(可执行的jar),需要在Linux中启动并持续运行 1.1.直接执行程序 直接执行程序后,在程序执行期间,无法在当前会话中再执行其他操作 1.2.直接执行程序后 ...
- 小白python和pycharm安装大佬勿扰
编程语言发展和Python安装 计算机语言的发展 机器语言 1946年2月14日,世界上第一台计算机ENIAC诞生,使用的是最原始的穿孔卡片.这种卡片上使用的语言是只有专家才能理解的语言,与人类语言差 ...
- JSTL fn函数使用总结
首先,我们要在页面的最上方引用: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/function ...
- 文盘Rust——子命令提示,提高用户体验
上次我们聊到 CLI 的领域交互模式.在领域交互模式中,可能存在多层次的子命令.在使用过程中如果全评记忆的话,命令少还好,多了真心记不住.频繁 --help 也是个很麻烦的事情.如果每次按 'tab' ...