V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Rwing
V2EX  ›  C#

鉴于 C# 正沦为"小众"语言,想向大家介绍一下它,各位想看点什么?

  •  3
     
  •   Rwing · 161 天前 · 6912 次点击
    这是一个创建于 161 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有感于 想学一门后端语言,哪个比较用的多,写起来比较爽

    想向大家介绍一下这门"写的爽"的语言,又怕才疏学浅介绍不清楚。

    不知道各位想看点什么?

    不谈论生态就业等等问题,单纯说语言本身,有可能涉及到 .NET

    第 1 条附言  ·  161 天前
    我开头已经说了本帖不讨论生态就业等问题,单纯的向“想了解其他优秀语言的人”介绍一下 C#,烦请后来者不要再讨论生态就业等问题了,让我们聚焦在语言本身
    第 2 条附言  ·  159 天前
    谢谢给出意见建议的各位朋友,我计划写个系列文章,来介绍一下 C#语言本身,也可能会涉及到.NET 的一部分。
    我只是不希望优秀的东西被埋没,但是文章无意引起各语言的对比与争议,只要能让读者觉得“这一块有点意思”、“这个语法挺爽”这就足够了,也是我的初衷。
    91 条回复    2021-08-09 14:53:39 +08:00
    Cbdy
        1
    Cbdy  
       161 天前 via Android
    抛开语言本身,国内 C#的现状是:工资低、岗位少、社区不活跃

    这样的情况下,还给人推荐 C#,是真爱了
    lixingjun
        2
    lixingjun  
       161 天前
    即便是开发桌面应用,也都直接 web 化了,C#前景堪忧
    smilenceX
        3
    smilenceX  
       161 天前
    看到 2 楼,我觉得,楼主不妨介绍一下 C#桌面程序 相对于 web 化的桌面应用的优势
    icyalala
        4
    icyalala  
       161 天前
    没关系,还有 Unity 呢~
    heyhumor
        5
    heyhumor  
       161 天前
    简洁,优美
    smilenceX
        6
    smilenceX  
       161 天前
    呃 ,楼主说的是语言本身,3 楼说的主题更偏 .net ,忽略 3 楼吧
    Rwing
        7
    Rwing  
    OP
       161 天前
    我开头已经说了本帖不讨论生态就业等问题,单纯的向“想了解其他优秀语言的人”介绍一下 C#,烦请后来者不要再讨论生态就业等问题了,让我们聚焦在语言本身
    tabris17
        8
    tabris17  
       161 天前
    社区不活跃,三方包太少了
    tabris17
        9
    tabris17  
       161 天前
    语言是个好语言,就是没啥用
    imshawer
        10
    imshawer  
       161 天前   ❤️ 3
    C#,丝般顺滑,行云流水。

    .NET ,连环境都不用装,self-contained 直接就可以欢快的跑在 Linux 上。

    甲方说,.NET ? 还是用 JAVA 吧。
    dxxzst
        11
    dxxzst  
       161 天前
    放到十年前,还可以
    Cbdy
        12
    Cbdy  
       161 天前 via Android
    @Cbdy 打完一般就发出去了,就语言语法本身,现在各大语言其实都在同质化,区别越来越小了。

    比如 TC39 天天琢磨怎么给 JavaScript 加特性,一年一个出个新版本,不够用还可以自己写插件; Java 再过两个月就版本 17 了,又有新特性,Loom,Valhalla 估计也快了(

    很多人拿 Java 和 C#、Go 比,在我看来人才是最重要的因素,人多,社区活跃,剩下的不足可以慢慢改进嘛,这就是开源的魔法。

    Go 的协程很棒,Java 对标弄了个 Loom ; Go 支持 AOT 成 Native Image,GraalVM 也对标弄个 AOT 编译器; C#是语法糖的先锋,但是加糖容易,减糖难,而 Java 也在加糖、但是更加保守(慎重),比如模式识别、Record 等

    所以比起现有的语法、生态,一个语言的社区才是最重要的
    wanguorui123
        13
    wanguorui123  
       161 天前 via iPhone
    自己用还是可以的
    Cbdy
        14
    Cbdy  
       161 天前 via Android
    @Cbdy 模式识别 -> 模式匹配
    vincent7245
        15
    vincent7245  
       161 天前
    语言是工具,只要钱给够让我用 python 写个电商系统都没问题
    dfkjgklfdjg
        16
    dfkjgklfdjg  
       161 天前
    C#的优势场景?快 10 年前了解过现在已经连 C#能干嘛都记不起来了
    Rocketer
        17
    Rocketer  
       161 天前 via iPhone   ❤️ 4
    中国不是全部。眼光放远一点,学 C#赚老外的钱不香吗?
    huangmingyou
        18
    huangmingyou  
       161 天前   ❤️ 3
    java 的内存消耗,真的没人在乎吗,特别是微服务的场景下。白白浪费大堆内存。
    yeqiu
        19
    yeqiu  
       161 天前
    想看 c#中常用的异步方案,或者不同语言的异步处理方案。最好能深入到 cpu 内存交换和任务调度方面的
    感觉 await 是一个很差劲的异步方案,难以理解也不易使用。
    love
        20
    love  
       161 天前
    Kotlin - 更好的 C#
    zhuangzhuang1988
        21
    zhuangzhuang1988  
       161 天前
    命...
    yolee599
        22
    yolee599  
       161 天前
    感觉 C# 在桌面应用上更加发力还是挺不错的。
    unco020511
        23
    unco020511  
       161 天前
    java 也没好到哪去,上古语言
    Rwing
        24
    Rwing  
    OP
       161 天前
    @yeqiu 不好意思恕我才疏学浅,没有很深入的了解 Goroutines,这里有一篇文章对比 C#与 go https://zhuanlan.zhihu.com/p/279164405
    我相信两种模式是各有利弊的。
    至于 async/await 是否足够优秀,我个人觉得 async/await 对于初学者来说确实有些难理解,不过 async/await 应该也没那么糟,不然 python/js/rust/c++也不会竞相模仿吧
    alexkkaa
        25
    alexkkaa  
       161 天前 via Android
    C#表面是很好。但是.net 平台却不那么好, 就本身来说很多标准库实现都有问题, 比如 cookie 的实现还挺留在很久前
    fl2d
        26
    fl2d  
       161 天前
    等 VR/AR 起来了,c 井还能再闹一阵子?
    kop1989
        27
    kop1989  
       161 天前   ❤️ 2
    以现在这个时间点( 2021 )而言,语言之间几乎没有绝对的优劣势可言。

    比如你说 C#有什么绝对突出的优势么,并没有。优势在于原生支持.net
    Java 语言本身有什么绝对优势么?也没有。优势都在那些框架上。

    这就像是你讨论:英语、法语、德语、意大利语在语言本身上哪个优秀?

    所以抛弃既有生态和行业内既有的开发流程来探讨语言本身,基本没有意义。
    Jooooooooo
        28
    Jooooooooo  
       161 天前
    不如去学 rust.

    还有 java 最新版本(16) 里的 gc 很值得一学, 也可以看看. stw 时间可以控制在 10ms 以内.
    dinfeo
        29
    dinfeo  
       161 天前
    坐标工业领域
    作为一个 从 delphi C# 到 现在 java Node.js 混用的
    之前的很长一段时间,工厂的 IPC 都是装 Windows 系统的,而且 OPC 、modbus 等工业协议,C#都有较好的现成的包可以用,甚至一些机器的 HMI 都是跑着 windows 。。。
    工厂里的环境,一般是与外网隔绝的,系统常年不更新,所以很大一部分工业软件都是基于 C#的 winform 程序。
    但随着近几年 IOT 的兴起,各种 Linux 的 IOT 设备慢慢被工业领域接受,如传感器,gateway,智能型控制器。
    所以,近几年 java 和 node.js 在工业领域又流行起来。

    C#觉得还是 winform 和 Unity3D 比较适合。无论在 IOT 和 Web 的开发上,C#都显得力不从心,虽然有.net core 的跨平台,但是太晚了,在非 windows 的环境.net core 的稳定性和运维都是个风险。就和 windows phone 一样,不是不好,是出来太晚,导致没有了生态,最终失败。。。
    Rwing
        30
    Rwing  
    OP
       161 天前   ❤️ 1
    @kop1989 不敢苟同,是没有绝对的优劣势,但是有相对的优劣势,某个语言可以"写的爽一点点"我就感觉很开心了。
    本贴也不是一个比较贴,只是向有心了解的人介绍一下,这没有意义吗?如果说没有意义,那我觉得“您点进来花了大段时间打字点评没意义”这事其实更没意义
    yejinmo
        31
    yejinmo  
       161 天前
    同工控领域

    服务端及 PC 客户端均由 C#开发,服务端正在迁移 .Net 5,PC 客户端用到了 WinForm 还停留在 .Net Framework 4.6.1

    开发丝般顺滑
    yejinmo
        32
    yejinmo  
       161 天前   ❤️ 1
    C#也绝对不是小众语言,只是相对国内这批 Java 大军小众了些
    国外接 C#的外包爽到起飞,钱多工作量少,工作量指的是实现相同功能,C#代码要比 Java 少些一大堆
    kop1989
        33
    kop1989  
       161 天前
    @Rwing #30 关键就在此,即便是“相对优劣”,也是需要场景的,“爽”也是要场景的。
    而场景往往就诞生于行业既定的开发流程和既定生态下。

    比如你要用微服务,你一定不会因为 c#的语法糖更甜、LINQ 更好用就放弃 java 转用 C#。
    反之,你要开发 windows 客户端,你一定不会因为 Java 更原教旨主义的面向对象就选择 Java Swing 。
    charlie21
        34
    charlie21  
       161 天前
    SDK 和 编辑器 和 IDE 直接介绍跨平台的 .NET Core 和 vscode 和 JetBrains Rider
    不支持跨平台的用品请不要介绍 谢谢,唯有如此才能挽救 C# 形象
    yejinmo
        35
    yejinmo  
       161 天前
    附一篇文档,对比分析写的很详细,适合熟悉 go 的开发人员看看

    [翻译]Go 与 C#对比 第三篇:编译、运行时、类型系统、模块和其它的一切

    https://www.cnblogs.com/InCerry/p/go-vs-csharp-part-3-compiler-runtime-type-system-modules-and-everything-else.html
    ligiggy
        36
    ligiggy  
       161 天前   ❤️ 1
    我觉得 C#的多线程、异步操作,官方提供的 Socket API,SerialPort API,XML API 等可以用无可比拟来形容,提示文档也是其他语言无可比拟的。而这些特点,几乎就是传统制造业所需要的,短时间内就开发一套可以用上的、且稳定的客户端软件。
    Jirajine
        37
    Jirajine  
       161 天前 via Android
    C#是 Java 那个时代的语言了,虽然各种语法糖特性加的多,放到现在也算不上“写的爽”。
    dotnet 平台上倒是 ml 系的 F#写起来很爽,可惜一直不被重视,不温不火。
    zhuangzhuang1988
        38
    zhuangzhuang1988  
       161 天前
    @ligiggy 还有原生的标准异步 cancel progress 支持, 别的语言都没有的。
    JamesMackerel
        39
    JamesMackerel  
       161 天前
    @yeqiu

    我倒是认为 async/await 语法糖是个非常优雅的解决方案,毕竟如果没有了它又一定要写 eventloop,似乎就要回到被“回调地狱”支配的时代。这个语法糖把这种难以理解的非线性的编程模式变成了非常优雅易懂的线性的编程模式,所以我觉得它是优雅的。
    msg7086
        40
    msg7086  
       161 天前   ❤️ 1
    @huangmingyou 在乎内存的人为什么要选型 Java ?
    都选了 Java 了还在乎那点内存干什么。
    我司跑 Java,开发测试虚拟机给 24G 内存,实体机估计要配 1T 以上内存。
    yazinnnn
        41
    yazinnnn  
       161 天前
    F#之于 C#有没有机会成为类似于 scala 之于 java 那种地位?
    wellsc
        42
    wellsc  
       161 天前
    .netcore 能像 golang 那样交叉编译的话还是挺强的
    yuyu2140
        43
    yuyu2140  
       161 天前
    Android 开发,写 Java 和 Kotlin,最近一年陆陆续续的负责后端的一些开发,接触到了 C# ,反正写起来比 Java 舒服多了,Kotlin 嘛 感觉就是 C# 的马甲,简直就是熟悉的味道。或者换句话说,这几年巨头门主推的语言都比较接近。
    agoodob
        44
    agoodob  
       161 天前
    如果要制作 Windows 平台上的原生桌面程序,是使用 C# 吗?
    能否总体介绍一下制作 Win 原生桌面程序的有哪几种方法?一些关键字和他们的概念介绍,并给出你个人对这些技术的评价和对比。
    jjwjiang
        45
    jjwjiang  
       161 天前   ❤️ 2
    生态差是公认的,只能说.net core 在慢慢让局势好转

    但是说语言写起来差不多就搞笑了,但凡写过一行 c#的 lambda 和 java 的 stream 也没法说出这种话
    xz410236056
        46
    xz410236056  
       161 天前
    c#我现在唯一能想到的用处就是 unity 了
    EKkoGG
        47
    EKkoGG  
       161 天前
    已启用几个 .net 5 后端应用了,暂时感觉良好
    x940727
        48
    x940727  
       161 天前
    只谈语言不谈生态就是耍流氓,如果只谈语言 C++是无敌的,什么特性都有,你想怎么玩就怎么玩。
    hjahgdthab750
        49
    hjahgdthab750  
       161 天前
    @wellsc #42 已经可以了,只是对 linux 3 以下内核,和小众处理器架构不友好
    wellsc
        50
    wellsc  
       161 天前
    @hjahgdthab750 只是有,但是和 golang 还是差点火候,java 还有 graalvm 呢
    masterDu
        51
    masterDu  
       161 天前
    @jjwjiang 能简单说一下这个是什么情况吗?“c#的 lambda 和 java 的 stream”;谢谢
    zhangrenjie
        52
    zhangrenjie  
       161 天前
    @dinfeo 你工作内容是使用 c#在工业领域吗?感觉工业生产车间这种就是桌面端的,客户不也管你使用什么实现,用起来稳定就行。看到工厂里面的 XP 系统上面跑的 MFC,照样跑到飞起。
    secondwtq
        53
    secondwtq  
       161 天前 via iPhone   ❤️ 2
    > 不谈论生态就业等等问题,单纯说语言本身
    楼主还没看出来本站大多数人对所谓”语言本身”不感兴趣么?(甚至根本不明白何为”语言本身”)
    nullcoder
        54
    nullcoder  
       161 天前
    跟着盖茨混的,到后面基本都得到了 bill
    看看 ibm,挪鸡鸭,个体开发者就更别说了
    出发他步乔帮主后尘
    mikasyou
        55
    mikasyou  
       161 天前
    小人菜鸡,c# 和 java 相比的话,我能想到是从**替代反射**方面考虑,c#有表达式树,java 有 apt 插件
    例如从(只是功能对标的)
    c#的`AutoMapper`库 和 java 的`MapStrcut`库,还有 c#的 graphql 和 java 的 `grahql-java-tools`
    它们就分别靠表达式树 、apt 来高性能实现,这就能看出两个语言的一些区别和特点了
    ReferenceE
        56
    ReferenceE  
       161 天前 via Android
    泻药,C#粉,生态太差没办法
    kett
        57
    kett  
       161 天前
    楼主有推荐的入门书吗?感觉讲 C#的书比 Java 少太多太多了。
    pythonee
        58
    pythonee  
       161 天前
    之前用 JAVA 、Python 较多
    中间玩票性质的看过 Scheme

    很好奇 C#有什么好玩的呢,据说 LINQ 是杀手锏呀,期待
    levon
        59
    levon  
       161 天前
    LINQ to Entity,访问数据库,能完全不写 sql 吗
    billlee
        60
    billlee  
       161 天前
    就语言本身来说,我比较关注类型系统,内存管理,ffi, 元编程这几个方面
    loryyang
        61
    loryyang  
       161 天前
    我之前接触过一段时间,这个语言很好,他的问题本身不在于语言自身
    oneforallsoft
        62
    oneforallsoft  
       161 天前
    @yejinmo
    你接过国外 C#外包?
    towser
        63
    towser  
       161 天前
    C# 的书够看了,倒是.NET 的 IL 相关以及 WPF 缺乏特别好的教程。
    BBCCBB
        64
    BBCCBB  
       161 天前
    @Cbdy loom 遥遥无期.
    yccalculus
        65
    yccalculus  
       161 天前
    @levon c# 有些 orm 可以一点 sql 都不写,包括各种 join
    noroot
        66
    noroot  
       161 天前
    C# 国内书籍和教程相对( Java 、Javascript 、Python 、Go ...)较少,不便于小白入门。
    相对于新进的 Go 来说又过于复杂,面对国内的情况(其他转码农,小白基础不行等)很难竞争。
    Fule
        67
    Fule  
       161 天前   ❤️ 1
    楼主看看大部分回复的画风,都是老生常谈了~只要自己喜欢,大众、小众无所谓。身边有对 C#感兴趣的人,就一起研究一下。要么就整个群什么的,有个简单的进入门槛,或者其实找不错的论坛之类的,对于 C#相关的问题,直接有针对的回复。这种公开的帖子就会有一些那种原本就对 C#无感乃至厌恶的人进来以“过来人身份”丢一句类似前几楼那样的话,相当扫兴。

    别的不说,俺在教俺闺女 C#,先用这儿的文档: https://docs.microsoft.com/zh-cn/learn/paths/build-dotnet-applications-csharp/, 她自己照着研究照着做。她学校有在教 Python,她自己说觉得更喜欢 C#的变量声明方式。
    initd
        68
    initd  
       161 天前
    微软公司的屁股倾向太严重了,它从来不惮于违反用户的意愿去达成某种目的。
    呵呵呵呵
    agagega
        69
    agagega  
       161 天前 via iPhone
    Swift 、C#、Kotlin 来自不同的三家公司,但他们有时候又有些相似,都是糖中糖
    lonenol
        70
    lonenol  
       161 天前
    如果志在介绍 "写的爽" 这一点,那就介绍 C#的各种语法糖...然后还要和 Java 对比一下。。你们看,Java 要这样这样这样这样才能实现,我 C#一行代码就行了这样。。
    ligiggy
        71
    ligiggy  
       161 天前
    @levon 可以的
    hsc0der
        72
    hsc0der  
       161 天前
    @yeqiu await async 设计的优点之一就是方便理解
    colincat
        73
    colincat  
       161 天前
    Unity3D 不就是用 C#吗,王者荣耀里面应该有 C#代码及 lua 的混合代码
    encro
        74
    encro  
       161 天前
    介绍.net 5.0,WinUI 3,然后是 nuget 里的优秀库和垃圾。
    tsungkang
        75
    tsungkang  
       161 天前
    10 年.net 老开发在此,从.net framework2.0 一路用到.net 5,.net core 也是从 alpha 一路用到现在,自从.net 可以跑在 linux 上面以后我仿佛打开了新世界大门;在一次次的.net 版本更新中我也能切实感受到微软在这方面的努力以及改变,所以我自己还是很喜欢.net 的;

    从语言层面来说的话,C#最让我欲罢不能的就是 LINQ 跟 TAP(async/await),有时候要临时处理什么事了(比如从数据库里导点什么表格然后做点加工之类的),直接掏出 linqpad,一顿操作然后交差,看着他们投来赞赏的目光我感觉自己就是公司的 LINQ 之王;(跟那些一言不合掏出 python 的哥们是不是有点异曲同工?)

    话又说回来了,在我眼里很多公司在用的 java8/jdk1.8 跟目前 Oracle 规划的 2 个 LTS 版本( 11/17 )比起来也有不小的差别…所以不管什么语言,在这大环境下面最终都要回归到实用主义上面来…
    Shook
        76
    Shook  
       161 天前
    如何使用 c#开发 unity 游戏
    pkoukk
        77
    pkoukk  
       161 天前
    c#在老外那可一点都不小众。
    国内小众的原因很简单啊,当年学校教的少。第一波互联网浪潮的时候会的人少,java 占了先发优势,后续大家又产生了路径依赖...
    xianxiaobo
        78
    xianxiaobo  
       161 天前
    如何用 c#开发游戏
    fyxtc
        79
    fyxtc  
       161 天前
    可以语言本身的讨论真的一点意义都没有。。。工具箱里取业务所需即可,没要讨论锤子怎么样
    Dragonphy
        80
    Dragonphy  
       161 天前
    微服务生态下,C#应该比 Java 好不少吧,仅仅是缺少生态?反正 Java 轮子多,但是现在微服务、云原生浪潮下太吃性能了。
    DT27
        81
    DT27  
       161 天前
    真的特别喜欢 C#,感觉 Java 就是异端
    pipilu
        82
    pipilu  
       160 天前
    @yejinmo 大佬哪里接外包啊
    Lemeng
        83
    Lemeng  
       160 天前
    自己用用就好,任何东西的用户量都是驱利的,不讨论可以,但也是实实在在的现实问题
    wangyzj
        84
    wangyzj  
       160 天前
    语言是否成功要天时地利人和
    反正我不喜欢 java
    臃肿啰嗦慢
    dinfeo
        85
    dinfeo  
       160 天前
    @zhangrenjie 没错,以前也有很大一部分 C++ mfc 的,当时现在会这些的人很少了,所以,C#很好的弥补了这个空缺,拖拉界面方便,易上手,招人相对 C++ mfc 简单。
    所以说,在制造业里,当时 C#还是挺有市场的。
    sagaxu
        86
    sagaxu  
       160 天前 via Android
    来传统行业看看,C#不比 Java 用的少
    Rocketer
        87
    Rocketer  
       160 天前 via iPhone
    @levon LINQ 的方便之处在于它不仅能代替 SQL,连 NoSQL 也可以。比如 MongoDB,直接 collection.AsQueryable(),后面就都一样了,各种数据库在 LINQ 面前都是一样用,甚至包括文件(可以直接查询 xml 文件的节点)
    mmdsun
        88
    mmdsun  
       159 天前 via Android
    unity3D 游戏开发用得多啊
    Rwing
        89
    Rwing  
    OP
       159 天前
    谢谢给出意见建议的各位朋友,我计划写个系列文章,来介绍一下 C#语言本身,也可能会涉及到.NET 的一部分。
    我只是不希望优秀的东西被埋没,但是文章无意引起各语言的对比与争议,只要能让读者觉得“这一块有点意思”、“这个语法挺爽”这就足够了,也是我的初衷。
    jeeyong
        90
    jeeyong  
       123 天前
    @vincent7245 你咋瞧不起 python 呢? python 是世界上最好的语言.
    peng0416
        91
    peng0416  
       120 天前
    @Rocketer 还是太难了点
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3770 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 03:48 · PVG 11:48 · LAX 19:48 · JFK 22:48
    ♥ Do have faith in what you're doing.