声明多维数组
• 创建一个多维数组
int[,] intMatrix;
float[,] floatMatrix;
string[,,] strCube;

使用new关键字
• 必须指定每个维度的大小
int[,] intMatrix = new int[3, 4];
float[,] floatMatrix = new float[8, 2];
string[,,] stringCube = new string[5, 5, 5];

Jagged Array交错数组
• 交错数组有点像多维数组
• 但是每个维度有不同的大小
• 交错数组是数组的数组
• 每个数组有不同长度

如何创建交错数组
int[][] jagged = new int[3][];
jagged[0] = new int[3];
jagged[1] = new int[2];
jagged[2] = new int[5];

生成01的函数Gen01,通过该函数体会递归:

static void Gen01(int index, int[] vector)
{
if (index == -)
Print(vector);
else
for (int i=; i<=; i++)
{
vector[index] = i;
Gen01(index-, vector);
}
}

Gen01

扩展方法(具体见MSDNhttps://msdn.microsoft.com/zh-cn/library/bb383977.aspx

最常见的扩展方法是 LINQ 标准查询运算符。

在代码中,可以使用实例方法语法调用该扩展方法。 但是,编译器生成的中间语言 (IL) 会将代码转换为对静态方法的调用。 因此,并未真正违反封装原则。 实际上,扩展方法无法访问它们所扩展的类型中的私有变量。

anonymous type匿名类型

// 使用匿名类型表达一辆车

var myCar = new { Color = "银色", Brand = "大众", Speed = 180 }; //使用var声明一个匿名类型

Console.WriteLine("我的车是{0}-{1}。 ",
myCar.Color, myCar. Brand);

匿名类型是引用类型,直接派生自 System.Object
• 已经重写了Equals(), GetHashCode()和
ToString()的版本
• 不要有==和!=运算符重载 (直接使用上面说的Equals())

可访问级别
• C#中的访问修饰符
• public-访问不受限制
• private-访问仅限于包含类型
• protected-访问仅限于包含类型或从包含类型派 
生的类型
• internal-访问仅限于当前程序集
• protected internal-访问限制到当前程序集或
从包含派生的类型的类别

继承:重要方面

结构体不能被继承
• C#中没有多继承
• 只有多接口可以被实现
• 实例和静态构造函数不能被继承
• 继承是传递关系
• 如果C从B派生,而B从A派生,那么C同样从A派生
• 一个派生类扩展它的基类
• 能够添加新成员,但不能删除派生成员
• 以相同内容或签名声明的新成员隐藏了所继承成员
• 一个类能够声明virtual虚拟方法和属性
• 派生类能够override重写这些方法的实现
• 如: Object.Equals()是虚方法


虚方法
• virtual method虚方法是用于基类实例和派生类有
相同方式,但其实现不同的方法
• 当声明为virtual时,方法称为虚方法
public virtual void CalculateSurface() 
• 基类中声明为虚的方法,能够在派生类中使用
override关键字重写

防御式编程原则
防御式编程意味着:防御式编程意味着:对任何公开方法,检查它的输入数据,前置条件和后置条件
• 期望不正确的输入,将其正确处理
• 不仅仅思考正常的执行流,也考虑不寻常的情况
• 确保不正确的输入结果出现异常,而不是不正确输出

一次性资源
• 小心处理一次性资源
• 所有实现了IDisposable的类应当遵守tryfinally / using模式:

StreamReader reader =new StreamReader("file.txt");
try
{
String line =reader.ReadLine();
}
finally
{
reader.Close();
} StreamReader reader =new StreamReader("file.txt");
using (reader)
{
String line =reader.ReadLine();
}

自文档代码
最好的文档是代码自己;
制作自我解释和自文档代码,易于阅读和理解;
不要对坏代码写文档,重写它!
(好代码不需要读注释,它是自我解释的)

自动洗牌程序

class Card
{
public string Face { get; set; }
public Suit Suit { get; set; }
public override string ToString()
{
string card ="(" + this.Face + " " + this.Suit +")";
return card;
}
} enum Suit{Club, Diamond, Heart, Spade}; static void Main()
{
Card card = new Card() { Face="A", Suit=Suit.Club };
Console.WriteLine(card);
}

从上面的代码体会ToString函数的重写,以及它是怎样被隐式调用的。

string output = point.Name + ":" + point;
object都会实现ToString方法
当他和string 执行 + 号操作时 ,编辑器自动执行将obj转换成string类型
如string output = point;出错,string output = point + "";//正确,会自动转为string

上面这段也可以体会ToString的隐式调用。

《C#编程》课件 - C#基础的更多相关文章

  1. C++ STL编程轻松入门基础

    C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...

  2. ubuntu下C编程,编译基础( 转)

    buntu下C编程,编译基础     C 编程中相关文件后缀 .a 静态库 (archive) .c C源代码(需要编译预处理) .h C源代码头文件 .i C源代码(不需编译预处理) .o 对象文件 ...

  3. (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹

    原文 (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) Windows Shell 编程,即 Windows ...

  4. async And await异步编程活用基础

    原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 await 的理解有更深一层的理解. async 和 a ...

  5. 量子计算机编程(二)——QPU基础函数

    第二部分主要是QPU的基础功能,第一部分就像是我们有了哪些基本的语句,第二部分就是我们能写一些简单基础的函数,一些小模块,第三部分就是他的应用了. 先来看一下一个简单量子应用的结构: 第一步,将量子态 ...

  6. Python网络编程之网络基础

    Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...

  7. 【雕爷学编程】零基础Python(01)---“投机取巧”的三条途径

    从3月13日报名尝试上网课学习(4天课8.9元),开始接触Python(中文发音“派森”),到今天有一星期了.这两天广泛搜索了一下相关的学习途径,本着“投机取巧”的出发点,居然小有心得,这里一并分享出 ...

  8. IOS编程User Interface基础

    IOS编程之User Interface基础 目录 概述 相关概念 常见问题 状态栏的隐藏 应用图标的设置 概述 IOS用户界面是APP呈现给用户最直观.最常用的方式,因此学会用户界面的编程是学习IO ...

  9. 电脑小白自学软件编程-.Net语法基础之循环语句,纯技巧干货

    写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的 ...

随机推荐

  1. nginx连接php fastcgi配置

    匹配到php结尾的文件抛到后端 后端php端口9000

  2. A quick tour of JSON libraries in Scala

    A quick tour of JSON libraries in Scala Update (18.11.2015): added spray-json-shapeless libraryUpdat ...

  3. HTML静态网页 Window.document对象

    一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:    var a =docunment.getElementById(&qu ...

  4. Iconfont矢量图标平台全面升级

    阿里UX矢量图标库今天全新发布上线了,这次升级相对于老版本做了30多项功能和体验上的改善:赶快来体验一下吧!! 请猛戳:www.iconfont.cn 请猛戳:www.iconfont.cn 设计师p ...

  5. Runtime Error---Description: An application error occurred on the server....

    [原]Runtime Error---Description: An application error occurred on the server.... 2010-1-7阅读2010 评论3 D ...

  6. vbox下Oracle Enterprise liunx5.4虚拟机安装10G RAC实验(三)

    接第二篇 http://www.cnblogs.com/myrunning/p/3996183.html 4.安装集群软件 4.1验证安装环境 经过检查发现以下3个包检查未通过: compat-gcc ...

  7. thinkphp自定义权限管理之名称判断

    权限管理,就是给不同的用户分配不同的权限.当用户登录或者操作时候进行判断,来阻止用户进行权限以外的操作.本次讲的是当用户登录一刻,只显示权限开启的内容. 一.建立数据库. 1.权限表funcla.来存 ...

  8. find a multiple

    Description The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each of ...

  9. openfire配置MSSQL说明(数据库设置)

    1.进入“SQL Server 配置管理器(SQL Server Configuration Manager)”,在左边窗口选择“SQL Server 2005网络配置”下面的分支“MSSQLServ ...

  10. Android课程---Android 如何用滑杆(SeekBar)组件设置图片颜色的透明度(转)

    Android系统支持的颜色是由4个值组成的,前3个为RGB,也就是我们常说的三原色(红.绿.蓝),最后一个值是A,也就是Alpha.这4个值都在0~255之间.颜色值越小,表示该颜色越淡,颜色值越大 ...