浅学一下C#,顺便做了几个小工具


最近这段时间跑去简单尝试了一下C#,主要是因为我认为某些东西如果要用js去写,那旧必须运行个V8,性能上是个问题,如果换一种语言会好很多,于是综合考虑之下,选了C#,因为这个也是跨平台的

先看着菜鸟教程看了一会,好想学进去了,好像懂了,那就开始练手吧

然后发现大脑一片空白

于是乎便使用AI的力量,我并没有直接vibe,而是让它一步一步教我:

我是一个C#初学者,接下来你要辅助我开发一个程序,不允许帮我写而是教我怎么写,你要一行一行代码给出来,不能放上长长一段代码

然后……

好像什么也没学到!(大

我不知道啊,可能是AI时代下我们真的学不进去了,也可能是我真的没有学习的力气了……

说实话,我现在还不是很明白这玩意的语法,但我没什么时间去深入研究学习了……

感受

这与JS和PY还是有点区别的,比我当年py转js的跨越感大多了

首先是类型上,其实也不算是困惑吧,我要创建一个数组array,我还是想着js的那个数组,也就是py和c#的列表list,而且写类型的时候也是写了ts中数组的写法(如string[]),不过很快发现这不太对啊,原来你也有list的吗,原来list和array不一样的吗

还有,在py和js被惯坏了,字符串肯定是单引号打起来最方便,但是在C#,这可不是一个玩意啊

单引号是char而双引号是string,一个存单个Unicode一个存平常用的字符串

但其实最搞不懂的,是命名空间namespace

其实我并不喜欢这套玩意,好乱

在py,引入一个模块用import,如果是项目内某个文件夹内的文件,比如foo/bar.py,就能用import foo.bar了用点分隔,在js,也是import(cjs用require),但是内容是路径字符串,例如import "./foo/bar.js"

到了c#,按我的理解,不知道对不对,这不是按文件看的,命名空间到处都是,是全局的,不能一眼看出这个命名空间是不是来自于哪个文件

命名空间可以随时使用,但一般用的时候嵌套起来挺严重的,直接长长一串贴上去,层数又多名字又长,要是想简便一点,可以用using,但即使是using,也得写得长长的

有时候简写,结果两个包都有这个命名空间,直接冲突了,而且这样搞写法也很多,这样也太乱了

好麻烦,不喜欢

或许C#的语法哲学不适合我吧……

项目

但是这段时间也是练了一下手并vibe了几个小软件的,毕竟C#实用性还是有的

这里有两个纯vibe的小软件,和两个伪手写的软件

什么是伪手写?那基本上是我照着AI给出的代码抄的,算是基本上都是AI写的,只不过AI没有调用工具操作文件而是我代劳手敲或者复制过去的

没错我就是这么颓废,说好的自己写呢怎么指导了几下几乎没有哪部分是自己写的了

至于构建产物的下载链接,我统一压缩了放在这里,采用分卷压缩,因为四个有三个都是Avalonia的而且文件体积比较大,就算分开来压缩放到这里也得分卷成两个文件(我要考虑到部署在cf pages上有单文件最高25MiB的限制,也顺便让你可以多线程同时下载三个部分更快一点),就是浅浅委屈一下想用那个WinForms写的的读者了,200kb和其它90~100mb的玩意混在一起下载

001/002/003

此外还有发在L站的帖子和发在Gist上的源码,在章节内会给出

接下来依旧是我的金字塔结构写法,越到后面越强

Simpic

L站帖子和源……好像没放,那算了

这玩意有一半是vibe的,有一半是伪手写的

首先一打开就是一个亚克力背景的UI,叫你Drop Here

Linus:DROP IT!

把图片或含有图片的文件夹拖进去,会自动识别并开始展示

可以通过按键切换图片,也可以通过按键打开悬浮窗选择图片

至于按键:

按键功能
A / W / , / [上一张(到头循环)
D / S / . / ]下一张(到尾循环)
R / Space随机一张
E / Enter打开/关闭悬浮窗
Esc关闭窗口

SvcTray

L站帖子源码

dsh刚发布的时候,很明显有一个与众不同的地方,它不是tui软件,但是要tui启动,启动之后给的是本地服务器url,要访问相应的网页才行,一时间各种相关插件和改版出来了,可其中有一些不是影响使用就是不与本机装好了的dsh互通,同时这dsh --profile web这么长也懒得打了(虽然终端会自己补)

命令长的还有scrcpy(我的命令要加一堆参数所以会比较长,你可以看到我的配置里面有dsh和scrcpy和一个不知道干什么只是拿来测试的Simpic),不是很方便

于是完全伪手写了一个WinForms的,在反复拉扯之后,「我」——这个Harness其实还不错

只需要右键托盘菜单,快速管理服务,点一下就能开,点一下就能结束掉,不会弹出终端窗口(想看的话也有一个简陋的文本框可供查看输出)

VertualKb

L站帖子源码

帖子里面有演示视频我就懒得在这里放上去了

其实就是一个翻转了90°的虚拟键盘,方便Moonlight串流用触屏模式的时候打字,这样打字舒服一点

Keyeal

L站帖子源码(什么叫你放个7z包的base64上去就行了)

一个模仿Keyviz V1的软件,但是那个软件我认为按键太大了,于是vibe了一个更好的,也有自定义(样式和颜色和位置),虽然不会太多主体就是了,不过也足够好用了

这是按键显示:

这是鼠标按下和鼠标轨迹(这是两张图片拼在一起了):

三个均可单独关闭启动

就这样了,没啥好写的