首页 新闻 搜索 专区 学院

C# 不能直接声明函数吗? 只能写类吗?

0
悬赏园豆:5 [已解决问题] 解决于 2020-09-05 19:34

c# 在winform里如果想自己封装一些常用的函数 直接通过
函数名() 调用 而不是
类名.函数名()

不能实现吗? 必须要类吗? 感觉好多余啊

开窍的主页 开窍 | 初学一级 | 园豆:150
提问于:2020-09-04 03:43
< >
分享
最佳答案
0

当你把类看作分类来理解的话,你就不会觉得多余了。分门别类,在软件开发中是很重要的一环。

收获园豆:2
默卿 | 老鸟四级 |园豆:4686 | 2020-09-04 09:15

比如 一个函数 就叫 md5() 直接写md5调用多方便 也不需要分类就能很清晰 难道非要分类才能使用吗

开窍 | 园豆:150 (初学一级) | 2020-09-04 09:17

@开窍: 你怎么确定只有一个md5函数呢

拓拓 | 园豆:593 (小虾三级) | 2020-09-04 09:33

@开窍: 那如果假如你写了一个函数叫md5,我也写了一个函数也叫md5,你使用的时候直接md5(),那么程序最终用你的还是用我的?可能你会说那就不要写重复函数嘛,可实际开发过程中,不同业务中极大可能存在同名函数,比如,我写的订单创建方法叫Save,你写的用户创建方法也叫Save,现在没有类的概念,那怎么办?只能我叫OrderSave,你叫UserSave,那这和类的概念有什么区别呢,每个业务里的方法还都得在命名前带上前缀才能识别,那我何不滋生出一个类的概念,里面的方法想叫Save叫Save,想叫Search叫Search,我只需要保证我的类是唯一的,不冲突的即可,或者说,我只需保证同一命名空间下,我这个类是唯一的,那么编译器就能通过类.方法名去找到我要执行的方法。

默卿 | 园豆:4686 (老鸟四级) | 2020-09-04 09:34

@默卿: 感谢大家的耐心回答 其实我就是面向对象大多数还是很方便的 但是有些函数(比如没有明确的分类,通用的一些函数) 我就是单纯的希望可以实现跟 面向过程的语法一样 去调用
比如 md5() 这个 我只是举个例子 如果定义的话 我肯定是用一个别人没用过的函数名定义
就比如 messagebox.show()
我希望实现的效果就是比如: 可以定义一个 messagebox1() 封装后调用时就直接写他 不用.show
也不用 xx.messagebox() 就是直接写 xxx()就能用

开窍 | 园豆:150 (初学一级) | 2020-09-04 17:38
其他回答(7)
0

写一个静态工具类,把常用的函数放进去,调用起来还是很方便的

NightKey | 园豆:207 (菜鸟二级) | 2020-09-04 08:40
0

直接函数名?属于哪里?哪个类?如何存放。

flyfishing | 园豆:896 (小虾三级) | 2020-09-04 08:52
0

不能。是的。

会长 | 园豆:9555 (大侠五级) | 2020-09-04 09:19

貌似记得.net 5,c# 9可以省略到这样:

https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/

----------------

In C# 9.0 you can just choose to write your main program at the top level instead:

using System;

Console.WriteLine("Hello World!");

 

支持(1) 反对(0) 花飘水流兮 | 园豆:11974 (专家六级) | 2020-09-04 10:12
0

在高版本C#中(忘了最低多少)可以实现,用using引用静态类就可以直接调用静态函数

using static System.Math;

void main()
{
     var a = Abs(-1); 
     // var a = Math.Abs(-1);
}
拓拓 | 园豆:593 (小虾三级) | 2020-09-04 09:38

高版本?2.0就支持了吧

支持(0) 反对(0) flyfishing | 园豆:896 (小虾三级) | 2020-09-04 09:43

@flyfishing: 查了一下,是6.0加进去的

支持(0) 反对(0) 拓拓 | 园豆:593 (小虾三级) | 2020-09-04 09:44

赞~不过引用两个有相同静态函数名的静态类,会直接冲突吧

支持(0) 反对(0) 疯疯过 | 园豆:229 (菜鸟二级) | 2020-09-04 09:59

@疯疯过: 当然会冲突,不过用类名限定就好了。
随便找了一篇博客
https://www.cnblogs.com/linianhui/p/csharp6_using-static.html#auto-id-2

支持(0) 反对(0) 拓拓 | 园豆:593 (小虾三级) | 2020-09-04 10:03
0
其实楼上的“ 默卿 ”说的已经挺准确了。我就说个实际的体验,对于一个通用的工具类库,就当有10个工具类,每个工具类里有10个方法,也就是这个工具类库有100个方法(实际项目更多)。像VS有智能提示吧,比如你想找Math类中的Min方法,但你全称不知道,只知道是M开头,你输入一个M,然后给你把其他类库里的带M的方法显示出来,本来你通过Math.M就只给你两个选项,现在你要在N多选项中找,是不是很头疼。再则,如果其他类也有Min方法,这样就直接冲突了,难道你每个类都要设计不同方法?
收获园豆:1
疯疯过 | 园豆:229 (菜鸟二级) | 2020-09-04 09:43
0
通信的搞程序 | 园豆:1354 (小虾三级) | 2020-09-04 09:50
0

貌似记得.net 5,c# 9可以省略到这样,你可以深入去学习一下:

https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/

 ------------

In C# 9.0 you can just choose to write your main program at the top level instead:

using System;

Console.WriteLine("Hello World!");

 

c#只是语法,如果是脚本跑,那也是可以的,连main都可以不要。

eg.https://www.cnblogs.com/huapiaoshuiliuxi/p/9471657.html

(不确定是否能打开,给个图)

 
他人论述论调主要是基于.net framework 、core、mono而谈。

确实这些个目前的版本(net5和c#9还没最终发布)的约定是类(然后规定的几种入口点),这种模式是自编辑器...到最终JIT中的约束形成。

而玩在其他地方(当然你也可以认为它不叫c#,因为按照微软官方才算正统的话,那么每个c#版本微软都写得很清楚)

收获园豆:2
花飘水流兮 | 园豆:11974 (专家六级) | 2020-09-04 10:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册