http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4417|回复: 4

[C#语言基础] C#方法中的默认参数使用

[复制链接]
发表于 2018-12-20 10:49:21 | 显示全部楼层 |阅读模式
最的不少地方用到了默认参数,下面我总结一下我的使用情况


C#中,一旦为某个参数分配了一个默认值,编译器就会向内部该参数应用定制一个attribute 即是(OptionalAttribute)这个attribute会在最终生产的文件的元数据类型持久性的存储下来,除此之外,编译器会向参数应用一个DefaultParameterValueAttribue,也会将这个特性持久性存储在最终文件的元数据里面。一旦编译器发现某个方法调用的时候,缺失部分实参,就可以确定是可选实参并从元数据中提取默认值,将值自动嵌入。

       有种情况可以适用方法的默认参数的情况,就是别人写的方法(已经很多地方用了,你现在想加个参数,又不用去改原来引用的代码)。当然你可以写个方法的重载,我也曾经想写重装来加上这个参数条件。因为重载已经会用了,所以就学习了下方法参数缺省的情况。

      下面我给大家提供一个例子,大家可以好好看看,自己动手一试。

      SayHello方法的定义如下,当我们写这个的时候,会怎么进行调用呢,请大家谈谈。  SayHello("name',"value")


[C#] 纯文本查看 复制代码
void SayHello(string name, string value, string text = "zz")
        {
            Console.WriteLine("走了一个缺省");
        }

 void SayHello(string name, string value, string text = "zz", string age = "test")
        {
            Console.WriteLine("走了两个缺省");
        }

我也看了园子里面大内老A写的那篇文章,讲得很好。但是我他说的那些,可以作为入门,但是并不能当成准则来对待。
     上面这种写法并没有啥毛病,但是如果方法是从模块的外部调用,更改参数的默认值具有潜在的危险性,call site在调用的嵌入了默认值,如果你以后更改了参数的默认值,但没有重新编译call site里面的所在代码,它在调用你方法的时候,依然会传递旧的默认值,所以可以考虑将0/null 作为哨兵的值使用,从而指出默认行为,这样一来,即使更改了默认值,也不必要重新编译包含了call site的全部代码。

[C#] 纯文本查看 复制代码
  //第一种做法
        static void TestMethod(string foo,string bar="bar123") {
            Console.WriteLine($"{foo}{bar}");
        }
     
       //第二种做法
        static void TestDefaultMethod(string foo,string bar = null) {
            bar = bar ?? "bar123";
            Console.WriteLine($"{foo}{bar}");
        } 
       推荐使用下面这种做法




1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2018-12-20 13:45:36 | 显示全部楼层
强烈支持楼主ing……
发表于 2018-12-20 13:59:21 | 显示全部楼层
真是难得给力的帖子啊。
发表于 2018-12-20 16:44:00 | 显示全部楼层
感恩无私的分享与奉献
发表于 2018-12-21 16:12:25 | 显示全部楼层
我只是路过打酱油的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-3-29 19:27

© 2014-2021

快速回复 返回顶部 返回列表