C#关键字的使用

params object[] 用于函数多参数的定义
public static void Write(string format, params object[] arg);
explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 例如,在下面的示例中,此运算符将名为 Fahrenheit 的类转换为名为 Celsius 的类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace EventDemo
{class Celsius{private float degrees;public Celsius(float temp){degrees = temp;}public static explicit operator Fahrenheit(Celsius c){return new Fahrenheit((9.0f / 5.0f) * c.degrees + 32);}public float Degrees{get { return degrees; }}}class Fahrenheit{private float degrees;public Fahrenheit(float temp){degrees = temp;}// Must be defined inside a class called Fahrenheit:public static explicit operator Celsius(Fahrenheit fahr){return new Celsius((5.0f / 9.0f) * (fahr.degrees - 32));}public float Degrees{get { return degrees; }}}class Program{static void Main(){Fahrenheit fahr = new Fahrenheit(100.0f);Console.Write("{0} Fahrenheit", fahr.Degrees);Celsius c = (Celsius)fahr;Console.Write(" = {0} Celsius", c.Degrees);Fahrenheit fahr2 = (Fahrenheit)c;Console.WriteLine(" = {0} Fahrenheit", fahr2.Degrees);Console.ReadLine();}}
}
View Code

 

implicit 关键字用于声明隐式的用户定义类型转换运算符。 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace EventDemo
{class Digit{public Digit(double d) { val = d; }public double val;// ...other members// User-defined conversion from Digit to doublepublic static implicit operator double(Digit d){return d.val;}//  User-defined conversion from double to Digitpublic static implicit operator Digit(double d){return new Digit(d);}}class Program{static void Main(string[] args){Digit dig = new Digit(7);//This call invokes the implicit "double" operatordouble num = dig;//This call invokes the implicit "Digit" operatorDigit dig2 = 12;Console.WriteLine("num = {0} dig2 = {1}", num, dig2.val);Console.ReadLine();}}
}
View Code

 

使用 operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace EventDemo
{class Fraction{int num, den;public Fraction(int num, int den){this.num = num;this.den = den;}// overload operator +public static Fraction operator +(Fraction a, Fraction b){return new Fraction(a.num * b.den + b.num * a.den,a.den * b.den);}// overload operator *public static Fraction operator *(Fraction a, Fraction b){return new Fraction(a.num * b.num, a.den * b.den);}// user-defined conversion from Fraction to doublepublic static implicit operator double(Fraction f){return (double)f.num / f.den;}}class Program{static void Main(){Fraction a = new Fraction(1, 2);Fraction b = new Fraction(3, 7);Fraction c = new Fraction(2, 3);Console.WriteLine((double)(a * b + c));Console.ReadLine();}}
}
View Code
按引用传递参数 -- 关键字ref

和前面的“按值传递”相对应的是按引用传递。顾名思义,这里传递的不在是值,而是引用。注意这里不是传递一个复制品了,而是将真实的自己传到方法中供方法玩弄。

  注意点:

  1、按引用传递的参数,系统不再为形参在托管栈中分配新的内存。

  2、此时,形参名其实已经成为实参名的一个别名,它们成对地指向相同的内存位置。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Timers;namespace AllDemo
{public class Program{static void Main(string[] args){int i = 1;int j = 2;int k = Plus(ref i, ref j);      //实参前也要加ref关键字Console.WriteLine(i);   //输出 2Console.WriteLine(j);   //输出 3Console.WriteLine(k);   //输出 5
Console.ReadKey();}public static int Plus(ref int i, ref int j)    //形参钱要加ref关键字
        {i = i + 1;j = j + 1;return i + j;}}
}
View Code
输出参数 - 关键字out

输出参数和引用参数有一定程度的类似,输出参数可用于将值从方法内传递到方法外,实际上就相当于有多个返回值。要使用输出参数只需要将引用参数的ref关键字替换为out关键字即可。但又一点必须注意,只有变量才有资格作为输出参数,文本值和表达式都不可以,这点要谨记。

  注意两个问题:

  1、编译器允许在方法中的任意位置、任意时刻读取引用参数的值。

  2、编译器禁止在为输出参数赋值前读取它。

  这意味着输出参数的初始值基本上是没意义的,因为它在使用前要被赋予新的值。因此想通过输出参数将值传入方法的路是行不通的。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Timers;namespace AllDemo
{public class Program{static void Main(string[] args){int i = 1;int j = 2;int k = Plus(i, out j);      //实参前也要加out关键字Console.WriteLine(i);   //输出 1Console.WriteLine(j);   //输出 100Console.WriteLine(k);   //输出 102
Console.ReadKey();}public static int Plus(int i, out int j){i = i + 1;j = 100;return i + j;}}
}
View Code

参数数组 - 关键字params

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Timers;namespace AllDemo
{public class Program{static void Main(string[] args){int count1 = Plus(1);       //输出 1
            Console.WriteLine(count1);int count2 = Plus(1, 2, 3);//输出 6
            Console.WriteLine(count2);int count3 = Plus();    //输出 0  参数数组本身可选,没传入值也不会出错
            {Console.WriteLine(count3);}Console.ReadKey();}public static int Plus(params int[] values){int count = 0;foreach (int i in values){count = count + i;}return count;}}
}
View Code

 

 

转载于:https://www.cnblogs.com/scmail81/p/8678757.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven 中 pom.xml 配置文件标签说明,dependencyManagement和dependencies区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 参考:http://zhaoshijie.iteye.com/blog/2094478http://blog.csdn.net/cpf2016/article/details/45674377 还有一篇转载文章…

学成在线--17.我的课程

文章目录一.需求分析二.API接口三.PageHelper1.PageHelper介绍2.添加依赖3.配置pageHelper四.Dao1.mapper 接口2.mapper.xml映射文件3.测试Dao五.Service六.Controller七.前端1.创建course_list.vue2.路由3.定义API方法4.前端视图course_list.vue详解1)API调用--在视…

码是数据系统中的基本概念。所谓码就是能唯一标识实体的属性或属性集合,他是整个实体集的性质,而不是单个实体的性质。 主属性与非主属性 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)。 不包含在任何…

关于C编程的一点感受

刚毕业的时候用了两个多月的C语言编程,总的来说对它还是很有感受的,C是一个过程式语言,没有像C,Java等OOP语言这样那样的一系列的规则和限制;它比较灵活,简洁,高效;这些是给我的印象最深的。这是…

如何打造高效的多任务、高并发的网络服务器系统?

同一个功能的软件,不同的团队,不同工程师去实现,肯定是千差万别,甚至从根本上完全不同。所以软件开发在未来很长时间内仍然是一项工匠的手工劳动,尤其像多任务,高并发,偏底层这种对实现技巧比较…

BZOJ.2780.[SPOJ8093]Sevenk Love Oimaster(广义后缀自动机)

题目链接 \(Description\) 给定n个模式串,多次询问一个串在多少个模式串中出现过。(字符集为26个小写字母) \(Solution\) 对每个询问串进行匹配最终会达到一个节点,我们需要得到这个节点所代表的子串出现在多少个模式串中。 建立广义后缀自动机。每次插入…

BigDecimal 加减乘除运算

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 java.math.BigDecimal。BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDeci…

主码 超码 候选码

码是数据系统中的基本概念。所谓码就是能唯一标识实体的属性,他是整个实体集的性质,而不是单个实体的性质。它包括超码,候选码,主码。   超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一…

学成在线--18.新增课程(课程分类查询)

文章目录一.需求分析二.课程分类查询介绍三.数据结构四.数据格式五.数据模型六.Api接口七.服务器端1.Dao1)定义mapper2)定义mapper映射文件2.Service3.Controller八.接口测试一.需求分析 用户操作流程如下: 1、用户进入“我的课程”页面&…

给程序员们的工资报价提醒

在薪水上讨价还价的方式有很多种,我要说的这一点也许并不是最好的。然而,如果使用的得当,会收到很好的效果。如果你正在跟一家公司接触(没有经过职业中介),而且事情看来很顺利,进度很快,你要保持这种面试的…

POI 方式-excle 表格导出实现-java-poi

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 效果&#xff1a; jsp 页面 用的Bootstrap &#xff1a; <li class"dropdown"> <a href"javascript:void(0)…

02-css的选择器

css的选择器&#xff1a;1.基本选择器 2.高级选择器 基本选择器包含&#xff1a; 1.标签选择器标签选择器可以选中所有的标签元素&#xff0c;比如div&#xff0c;ul&#xff0c;li &#xff0c;p等等&#xff0c;不管标签藏的多深&#xff0c;都能选中&#xff0c;选中的是所有…

iphoneX样式兼容

// 1.viewport meta 标签增加属性viewport-fitcover // 2.body元素增加样式 body { padding-bottom: constant(safe-area-inset-bottom); padding-bottom: env(safe-area-inset-bottom); } // 3.如有fixed底部的元素&#xff0c;也增加上面样式 xxx { padding-bottom: constant…

学成在线--19.新增课程(数据字典)

文章目录一.介绍二.数据模型三.数据模型类四.字典查询API接口五.服务器端1.Dao2.Service3.Controller一.介绍 在新增课程界面需要选择课程等级、课程状态等&#xff0c;这些信息统一采用数据字典管理的方式。 本项目对一些业务的分类配置信息&#xff0c;比如&#xff1a;课程…

范式简介

范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。范式的种类&#xff1a; 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF) 一个低一级范式的关系模式&#xff0c;通过模…

程序员的进化

对于很多同学来说&#xff0c;他们对程序员的职业生涯非常关注。而这本质上是一个进化的过程。我们将如何进化&#xff1f;在每个进化阶段我们应该如何提高自己&#xff1f;下面的文章根据我自己的切身经历和阅读过的书&#xff0c;为程序员每个阶段的进化提供了不同的学习思路…

【树形dp】vijos1144小胖守皇宫

细节很精妙 描述 huyichen世子事件后&#xff0c;xuzhenyi成了皇上特聘的御前一品侍卫。 皇宫以午门为起点&#xff0c;直到后宫嫔妃们的寝宫&#xff0c;呈一棵树的形状&#xff1b;某些宫殿间可以互相望见。大内保卫森严&#xff0c;三步一岗&#xff0c;五步一哨&#xff0c…

手机号码归属地及运营商查询

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;public class NewMobile {public stati…

redhat6.5手动配置网络

2、手动设置ip地址如果虚拟机不能自动获取IP&#xff0c;只能手动配置&#xff0c;配置方法如下&#xff1a;输入命令#vi /etc/sysconfig/network-scripts/ifcfg-eth0 [编辑网卡的配置文件]输入上述命令后回车&#xff0c;打开配置文件&#xff0c;使用方向键移动光标到最后一行…

学成在线--20.新增课程(最后完善)

文章目录一.效果展示二.服务端1.Api接口2.Dao3.Service4.Controller三.前端1.页面完善1&#xff09;创建course_add.vue页面2&#xff09;course_add.vue页面路由3&#xff09;course_list.vue中添加链接2.查询数据字典1&#xff09;视图中代码2&#xff09;定义Api方法3&#…