1.索引器

索引器是C#自创的内容,这是C++当中没有的内容,所以做一次笔记.

索引器是用于书写一个可以通过使用[]想数组一样直接访问集合元素的方法。我们只需要指定待访问实例或元素的索引。索引器的语法和类属性语法相同,除了接受作为元素索引的输入参数外。

class SampleCollection<T>
{// 声明一个数组来存储数据元素。private T[] arr = new T[100];// 定义索引器,它允许客户机代码   / /类实例上使用[]符号本身。   / /下面的代码主要(参见第2行。)         public T this[int i]{get{//这个索引器非常简单,仅仅返回或设置   //数组从内部相应的元素。return arr[i];}set{arr[i] = value;}}
}//program类显示了客户端代码使用索引器。
class Program
{static void Main(string[] args){// 声明SampleCollection类型的一个实例。SampleCollection<string> stringCollection = new SampleCollection<string>();// 使用[]符号的类型。stringCollection[0] = "Hello, World";System.Console.WriteLine(stringCollection[0]);}
}                

2.拆箱与装箱

装箱:所谓装箱是将一个原始类型或基础类型对象赋给一个object对象,object是C#基类,所有类都继承自object类

拆箱:反之,拆箱是将一个事先装箱过的object对象强制转换为目标对象。

例如:

class Test
{static void Main(){int mInt;object obj=mInt;//装箱int myInt=(int) obj;//拆箱
          }
}    

3.参数的按值传递与按引用传递

在C#当中,按值传递与C++是一样的,这里不做介绍了;主要说一下按引用传递。

C#使用关键字ref指定引用参数,在形参中使用ref的同时,在实参中也要用ref,否则将出现编译错误,另外你不能将一个没用初始化的对象按引用传递给函数。

例如:

class TestRef
{int a=5;myMethod(ref a);//use func by ref
       .........void myMethod(ref int a){//function block
        }
}

4.输出参数

输出参数只是从函数返回值的参数,输入值不要求。C#使用关键词out表示输出参数。

例如:

class TestOut
{int val;getNodeValue(val);..........bool getNodeValue(out int val){val = value;return true;}    

5.可变数量的参数和数组

C#中的数组使用关键词param进行传递,一个数组类型的参数必须总是函数最右边的参数.可以传递任意数量的的元素作为数组类型的参数。

例如:

class TestArray{void func(param int []array){print(array.length);}func(1);//输出1
func();//输出0
func(7,9,4);//输出3
func(new int[]array {4,6,7,3,5});//输出5int []array2=new int[]{4,5,6,1,2,3};func(array2);//输出6

}

6.运算符与表达式

 is关键字:

is关键字的作用是检查目标对象与给定对象是否兼容;如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。

例如:

class test1{}
class test2{}
class test3: test2{}class isTest
{test1 t1;test2 t2;static void Test(object obj){if(obj is t1){print("obj is test1 classes");t1 = (test1)obj;}else if(obj is t2){print("obj is test2 classes);t2 = (test2)obj;}else{print("obj not is test1 and test2");}    }static void Main(){test1 T1=new test1();test2 T2 = new test2();test3 T3 = new test3();test(T1);test(T2);test(T3);test("my test content");}
}

as关键字:

as关键字类似于C++强制类型转换,但是如果强制转换不成功,as将返回null而不引发异常。

例如:

namespace MyFirstApp
{class Base{public override string ToString(){return "base";}}class Device : Base{public delegate void GetVisiter(string name);}class Program{        static int Main(){Device de = new Device();Base b = de as Base;if(de != null){System.Console.WriteLine(de.ToString());}return 0;}}
}

表达式:

expression as type

和下面的代码是一样的效果,说明as关键字是通过is来实现的

expression is type ? (type)expression : (type)null

 sealed 关键词

被sealed修饰的类不能被实例化

7.接口类interface

在C#当中不引许多继承,多继承应该考虑把基类声明为interface,并且在interface声明封装的类中,不引许函数的实现,只能写出声明,就像C++的头文件,函数的实现留给派生类或结构去实现。

例如:

//interface
interface Equatable<T>
{bool Equals(T obj);//只能写出函数声明
}//
public class TestEquals : Equatable<TestEquatable>
{public string Make { get; set; }public string Module { get; set; }public string Year { get; set; }public bool Equals(TestEquals te)//实现基类当中的Equals函数
    {if(this.Make==te.Make &&this.Module==te.Module &&this.Year==te.Year){return true;}else{return flase}
}

注意:

接口具有下列属性:

  • 接口与抽象基类。 实现接口的任何类或结构必须实现其所有成员的链接。

  • 接口不能直接实例化。 其成员通过实现接口的任何类或结构实现。

  • 接口可以包含事件、索引器、方法和属性。

  • 接口不包含方法的实现。

  • 类或结构可以实现多个接口。 类可以继承基类并实现一个或多个接口

转载于:https://www.cnblogs.com/Leekin/p/5813087.html

C#与C++的几个不同之处知识点相关推荐

  1. 从言行合一到知行合一

    本篇记录突然的随想,偶尔停留 2022-01-17 rest不只是一个简单的api约束分享一本rest小手册,如何把东西变得 RESTful! 2021-12-06 规划 未来编程.   未来需要什么 ...

  2. Access to XMLHttpRequest at file from origin ‘null‘ has been blocked by CORS policy谷歌浏览器本地打开项目js文件报错

    Access to XMLHttpRequest at 'file:///xxxxx/PQ.BaseInfo.proto' from origin 'null' has been blocked by ...

  3. 2021-10-27 我与地坛

    2021-10-27 我与地坛 要是有些事我没说,地坛,你别以为是我忘了,我什么也没忘,但是有些事只适合收藏.不能说,也不能想,却又不能忘.它们不能变成语言,它们无法变成语言,一旦变成语言就不再是它们 ...

  4. 阿里云K8S容器服务的使用

    使用阿里云k8s构建服务 一. 上传镜像 二. k8s运行 三. 服务配置导入 四. 服务路由 五. 节点亲和性和污点管理 一. 上传镜像 在阿里云控制台找到"容器镜像服务",开启 ...

  5. Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器

    Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...

  6. 快起床刷题去,别人把你offer拿走啦

    好久没有上力扣刷题咯,又到了关键的时刻,却忘得零零散散,囧~ 话说,刷题.学算法.常用,这些技能才能长在身上! 上一道刚刚遇到的正菜~ 题:给定一个整数数组 nums 和一个目标值 k,请实现一个方法 ...

  7. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...

    使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...

  8. weblogic项目java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配 at oracle.jdbc.....错误解决

    原因:数据源配置时间格式问题 解决方案: 1.进入weblogic控制台 2.左侧菜单栏选择Service- JDBC- Data Source 3.选择你的数据源,然后进入Configuration ...

  9. IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成

    在新建类文件的时候自动生成注解,诸如我们常见的那些 作者,创建时间,TODO 等等 将以下格式的代码放在Settings -> File and Code Templates -> Inc ...

  10. SVN用法大全,SVN除了update、commit还有什么

    svn除了大家都知道的update.commit以外还有什么常用功能呢? 点击TortoiseSVN后,出现了右图的列表,这其中有哪些是常用的功能呢?最近在家办公,有些东西要svn操作,就了解了下. ...

最新文章

  1. 将功补过 树形动态规划
  2. 中国SaaS死或生之五:目标、方法、钱,一个都不能少
  3. devops定义_在层中定义DevOps
  4. 架构设计:文件服务的设计与实现
  5. SQL Server 索引基础知识(1)--- 记录数据的基本格式
  6. 百度宣布AI同传最新突破!能预测,低延时,演示效果惊人,外媒称媲美人类翻译...
  7. Win10 专业版激活!
  8. matlab生猪的出售时机,数学模型程序代码-Matlab-姜启源-第三章-简单的优化模型.doc...
  9. 基于51单片机的数字电压表
  10. 【资料分享】STM32配置TB6612驱动程序详解
  11. oracle 切换cdb,CDB与PDB之间的切换方法
  12. mysql select_type simple_mysql explain
  13. html级联选择器,级联选择器
  14. 计算机科学留学硕士工资,揭晓美国大学研究生毕业起薪TOP50排行榜单 你选对了吗?...
  15. adb install 命令参数
  16. 孩子不上学在家玩游戏打骂父母
  17. 柴胡加龙骨牡蛎汤去大黄合当归芍药散治顽固心悸案(李跃海)
  18. Web 身份证读取,ActiveX 网页 二代身份证读取
  19. rtx2060什么水平_RTX2060与Super有什么区别?RTX2060和RTX2060 Super性能对比评测
  20. 单片机实现PT2262解码原理

热门文章

  1. Android Telephony分析(六) ---- 接口扩展(实践篇)
  2. Linux Kernel 3.10内核源码分析--块设备层request plug/unplug机制
  3. 线程间通讯机制(提高篇)——深入浅出实现原理
  4. APK加密方法:某社交类Android APP加密分享
  5. JZOJ 5926. 【NOIP2018模拟10.25】naive 的图
  6. auot lisp 选择集处理_离散量的计算机处理64_1Cvs
  7. 匿名类java的说明_Java8 Lambdas与匿名类
  8. 设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现
  9. 【五校联考5day1】序列
  10. CSP-S2019游记