C#与C++的几个不同之处知识点
1.索引器
索引器是C#自创的内容,这是C++当中没有的内容,所以做一次笔记.
索引器是用于书写一个可以通过使用[]想数组一样直接访问集合元素的方法。我们只需要指定待访问实例或元素的索引。索引器的语法和类属性语法相同,除了接受作为元素索引的输入参数外。
class SampleCollection<T>
{
// 声明一个数组来存储数据元素。
private T[] arr = new T[]; // 定义索引器,它允许客户机代码
/ /类实例上使用[]符号本身。
/ /下面的代码主要(参见第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[] = "Hello, World";
System.Console.WriteLine(stringCollection[]);
}
}
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=;
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
func();//输出0
func(,,);//输出3
func(new int[]array {,,,,});//输出5
int []array2=new int[]{,,,,,};
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 ;
}
}
}
表达式:
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
}
}
注意:
接口具有下列属性:
接口与抽象基类。 实现接口的任何类或结构必须实现其所有成员的链接。
接口不能直接实例化。 其成员通过实现接口的任何类或结构实现。
接口可以包含事件、索引器、方法和属性。
接口不包含方法的实现。
类或结构可以实现多个接口。 类可以继承基类并实现一个或多个接口
C#与C++的几个不同之处知识点的更多相关文章
- 【AR实验室】mulberryAR : ORBSLAM2+VVSION
本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 mulberryAR是我业余时间弄的一个AR引擎,目前主要支持单目视觉SLAM+3D渲染,并且支持iOS端,但是该引 ...
- ASP.NET Core 之 Identity 入门(一)
前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...
- js-静态、原型、实例属性
本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- 试试SQLSERVER2014的内存优化表
试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 关于.NET异常处理的思考
年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- SQL Server表分区
什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...
- .Net多线程编程—并发集合
并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...
随机推荐
- android 70 使用ListView把数据显示至屏幕
使用单元测试添加数据: package com.itheima.showdata; import java.sql.ResultSet; import android.content.Context; ...
- LabVIEW设计模式系列——各种各样的状态机
- SQL Server中建立外键的方法
在SQL中建立外键约束,可以级联查询表中的数据,在C#代码生成器中,也能根据外键关系生成相应的外键表数据模型.外键也可防止删除有外键关系的记录,一定程度上保护了数据的安全性. 步骤: 1.要建立外键关 ...
- 一个玩具程序——测试密码强度(pure C)
替人写的C语言作业… 介绍: 程序名称:密码强度检测程序 注释风格:doxygen 测试环境:linux3.6, gcc4.7window7, vs2012 已知问题:1. 算法与参考链接不一致,结果 ...
- PHP 支持的协议/封装协议列表
附录 L. 支持的协议/封装协议列表 目录 文件系统 Socket HTTP 和 HTTPS FTP 和 FTPS PHP 输入/输出流 压缩流 Secure Shell 2 音频流 以下是 PHP ...
- 浅谈href 和 src的区别
href 表示超文本引用(hypertext reference),在 link.a 等元素上.src 表示来源地址,在 img.script.iframe 等元素上.src 的内容,是页面必不可少的 ...
- couchbase failover 集群故障自动转移方案研究!
最近迷上Couchbase了,现在所有的站点全部试用Couchbase进行缓存及持久化,这样以来貌似风险比较大啊,缓存服务器挂了就完了. 看到有讲到Couchbase的集群方案很简单,于是照着教程做了 ...
- C# 与 C++ 交互
参考: http://www.cnblogs.com/liping13599168/archive/2011/03/31/2000320.html Platform Invoke Tutorial:h ...
- [条形码] BarCodeToHTML条码生成类 (转载)
点击下载 BarCodeToHTML.zip 过多的我就不多说了大家直接看代码吧,这是一个帮助大家生成条码的类,大小大家可以自由的设定 /// <summary> /// 类说明:条码生成 ...
- 计算机网络-ip地址聚合后可用的地址数
(1)59.81.1.128/28=59.81.1.1000-0000(2)59.81.1.144/28=59.81.1.1001-0000(3)59.81.1.160/28=59.81.1.1010 ...