深入C#编程
1.NET框架
1.1.NET框架结构
VB.NET C# F# lronruby others....
.NET FrameWork(FCL)
公共语言进行时(CLR)
操作系统
.NET框架具有两个主要组建:CLR和FCL;CLR是.NET框架的基础;FCL是一个综合性的面相对象的可重用类型集合;
CLR公共语言进行时包含CLS(公共语言规范)和CTS(通用类型系统)
编译过程
C#代码>MSIL中间语言>CLR(JIT编译器)>平台专用代码
命名空间
System:包含其他的命名空间;
System.Collections.Generic:支持泛型操作;
System.IO:支持对文件的操作;
System.Net:支持对网络协议的编程;
System.Data:提供对表示ADO.NET结构的类的访问;
System.Windows.Forms:用于开发Windows应用程序;
System.Drawing:支持GDI+基本图形操作;
封装:
自动属性封装字段
public string Name{get();set()}
深入C#数据类型
值类型
int,float,double,string,boolean,enum,struct
值类型源于System.ValueType家族;
所有的值类型都储存在栈上;
引用类型源于System.Object;
类,接口,数组;
结构
结构的定义:
访问修饰符 struct 结构名
{
//结构体
}
结构体可以不用new,直接定义对象即可;
声明结构体的对象后,必须给结构的成员赋初值;
结构体不可以给成员赋初值;
装箱和拆箱:
将值类型转换为引用类型的过程称为装箱,反之为拆箱;
装箱示例:
int i=1;
object o=i;
拆箱示例:
int i=1;
object o=i;
int j=(int)o;
值传递和引用传递;
有ref的叫做引用传递,反之为值传递;
集合
集合分为单列集合和双列集合,泛型集合和非泛型集合
非泛型集合
单列
ArrayList
语法
ArrayList list=new ArrayList();
ArrayList中储存的是object类型;
双列集合
Hashtable
Hashtable语法
Hashtable list=new Hashtable();
添加元素
key为object
value为object
list.add(key,value)
遍历
foreach(DictionaryEntry item in engineere)
{
Console.WriteLine(item.key);
Console.WriteLine(item.value.Tostring());
}
泛型
单列
List<string> list=new List<string>();
双列
Dictionary<string,int> list=new Dictionary<string,int>();
遍历
foreach(KeyValuePair<string,int> item in engineere)
{
Console.WriteLine(item.key);
Console.WriteLine(item.value.Tostring());
}
深入类的方法
构造函数
在同一个类中,方法名与类名相同,没有返回值;
class Se
{
public Se()
{
}
}
在没有显示的声明构造函数时系统会在底层自动生成无参构造;
带参构造函数
语法
访问修饰符 类名(参数列表)
{
//方法体
}
构造函数是用来初始化对象的;
方法重载
在同一个类中,方法名相同,参数列表不同,跟返回值没有关系;
示例
public void Info()
{
}
public void Info(string a)
{
}
这就构成了方法重载;
对象交互;
示例
//电视机类的方法
public void open()
{
Console.WriteLine("电视机已打开");
}
//遥控器类方法
public void Turenon(TV tv)
{
tv.open();
}
从上面的例子可以看出调用遥控器类的Turenon(TV tv)方法就可以打开电视机了;这就是对象间的交互;
初识继承和多态
移除类的冗余代码
继承的概念
A类继承B类,A类就拥有了B类的非私有的属性和方法
base和Protected
base表示父类
调用父类构造函数
class Employee
{
public Employee(string id,string name,int age )
{
}
}
class SE:Employee
{
public SE(string id,string name,int age ):base(id,name,age)
{
}
}
继承的传递性
a:b,b:c;则a可以访问c的非私有的属性和方法
继承的单根性
一个子类只可以有一个父类
继承的价值
继承模拟了现实世界的关系;
继承实现了代码的重用;
继承是的程序结构清晰;
多态
实现代码的统一调用;
语法
访问修饰符 virtual 返回类型 方法名()
{
//方法体
}
子类
public override string sayhi()
{
//方法体
}
深入理解多态
子类替换父类出现的地方,且程序的行为不会发生任何变化就叫里氏替换
里氏替换原则是软件设计应该遵守的重要原则之一,有了里氏替换原则,才使继承复用称为可能,只有当子类可以替换掉父类时,软件的功能不受影响,父类才能真正被复用;
is用于检查对象和制定类型是否兼容
if(empls[i] is se)
{
}
as用于两个对象间的类型转换
Se ai=new Se("112","爱变成");
Se joe=new Se("113","joe");
PM get=new PM("890","盖子");
List<Employee> empls=new List<Employee>();
empls.Add(a1);
empls.Add(joe);
empls.Add(gates);
for(int i=0;i<empls.count;i++)
{
if(empls[i] is se)
{
Se se=empls[i] as Se;
Console.WriteLine(se.SayHi());
}
if(empls[i] is PM)
{
PM se=empls[i] as PM;
Console.WriteLine(se.SayHi());
}
}
抽象类和抽象方法
语法
访问修饰符 abstract 返回类型 方法名();
抽象方法没有大括号,也就是说没有方法体;
含有抽象方法的类必然是抽象类;
语法
访问修饰符 abstract class 类名{}
抽象方法
虚方法 抽象方法
用virtual修饰 用abstract修饰
要有方法体,即使是一个分号 不允许有方法体
可以被子类Override 必须被子类Override
除了密封类外都可以定义 只能在抽象类中定义
面相对象的三大特性
封装:保证对象自身的数据完整性和安全性;
继承:建立类之间的关系,实现代码复用,方便系统的扩展;
多态:相同的方法调用可实现不同的实现方式;
可扩展标记语言XMl
Xml称为可扩展性语言,用于描述数据;
xml的每对标记称为节点;
xml中的节点可自由扩展;
xml文件的节点区分大小写;
解析XML
XmlDocument myXml=new XmlDocument();
myXml.load("A.Xml");
XmlNode root=myXml.DocumentElement;
foreach(XmlNode node in root)
{
switch(node.name)
{
case "id" :
Console.writeLine("ID:{0}",node.innerText);
break;
case "name" :
Console.writeLine("姓名:{0}",node.innerText);
break;
}
}
文件操作
命名空间
using System.Io;
FileStream fs=new FileStream("1.txt",FileMode.Create)
StreamWriter sw=new StreamWriter(fs);
sw.Write("1.txt");
sw.Close();
fs.close();
File类和Directory类
都为静态类
Exists() 检查文件是否存在
Copy()将指定路径的文件复制到目标文件中;
Move()移动到一个新路径
Delete()删除指定文件;
Directory类
Exists() 检查文件夹是否存在
Move()移动文件夹到一个新路径
Delete()删除指定文件夹;
FileInfo类和DirectoryInfo类
FileInfo
Exists 检查文件是否存在
Extension 获取文件扩展名;
Name 获取文件名;
FullName 获取目录或文件的完整目录
方法
CopyTo() 复制文件
Delete()删除文件;
MoveTO()移动文件;
深入C#编程的更多相关文章
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 读书笔记:JavaScript DOM 编程艺术(第二版)
读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...
- [ 高并发]Java高并发编程系列第二篇--线程同步
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...
- C#异步编程(一)
异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...
- UE4新手之编程指南
虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...
- C#与C++的发展历程第三 - C#5.0异步编程巅峰
系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- 异步编程 In .NET
概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...
随机推荐
- 解决Jquery Kendo.xxx is not a function 的方法
不知道大家遇到过没有,要同时间使用Telerick 和Kendo的时候 这个问题搞了我好多天,其实解决方法很简单,就是在LAYOUT里面先写TELERIK的注册脚本, 再写KENDO的. @(Html ...
- 用SignalR 2.0开发客服系统[系列1:实现群发通讯]
前言 交流群:195866844 先说一下我为什么会写这个博客吧,(首先说一下,我是一个小菜鸟,讲的不好请指导 - -,) 前段时间公司的项目涉及到在B/S上使用即时通讯,(其实就是做一个B/S的客 ...
- [占位-未完成]scikit-learn一般实例之十二:用于RBF核的显式特征映射逼近
It shows how to use RBFSampler and Nystroem to approximate the feature map of an RBF kernel for clas ...
- mvc 重定向的几种方式
在RouteConfig添加一个简单的路由 //新增路由 routes.MapRoute( name: "Article", url: "Detial/{id}" ...
- 如何在虚拟机里安装Linux
本篇仅为作业... 实验课程:Linux 实验机器:联想y410p 指导老师:刘臣奇 实验时间:2016年9月25日 学生学号:140815 姓名:杨文乾 一.先安装虚拟机,之后创建一个新的虚拟机 之 ...
- 【无私分享:ASP.NET CORE 项目实战(第十二章)】添加对SqlServer、MySql、Oracle的支持
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 增加对多数据库的支持,并不是意味着同时对多种数据库操作,当然,后面,我们会尝试同时对多种数据库操作,这可能需要多个上下文,暂且 ...
- C#开发微信门户及应用(13)-使用地理位置扩展相关应用
本文继续上一篇<C#开发微信门户及应用(12)-使用语音处理>,继续介绍微信的相关应用.我们知道,地理位置信息可以用来做很多相关的应用,除了我们可以知道用户所在的位置,还可以关联出一些地理 ...
- [示例] Firemonkey OnTouch 多点触控应用
说明:Firemonkey OnTouch 多点触控应用,可同时多指移动多个不同控件 原码下载:[原创]TestMultitouchMove_多点触控应用_by_Aone.zip 运行展示:
- python学习笔记(基础三:if else流程判断、while循环、for循环)
if else流程判断 getpass在pycharm中无法使用,在命令行窗口中进入python环境可以使用. import getpassusername = input("usernam ...
- PHP 适配器模式
适配器模式(Adapter)模式:将一个类的接口,转换成客户期望的另一个类的接口.适配器让原本接口不兼容的类可以合作无间. [适配器模式中主要角色]目标(Target)角色:定义客户端使用的与 ...