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#编程的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  3. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  4. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  5. C#异步编程(一)

    异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...

  6. UE4新手之编程指南

    虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...

  7. 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 ...

  8. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  9. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  10. 异步编程 In .NET

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

随机推荐

  1. 总结个关于MySQL数据库的问题

    问题概括:MySQL Server has gone away? 遇到这个问题还得追溯到这次前往南通软件园出差.当天下午下班之前,主管说可能明天出差,把项目和最新的数据库备份一下,备份完成之后,也没在 ...

  2. redis命令1

    SADD numbers 1 3 5 创建一个名为numbers的intset SADD fruites "apple" "peach" 创建一个hashtab ...

  3. 学会用bootstrap的modal和carousel

    bootstrap框架提供了很多好用的javascript组件,可以很方便的实现常用的js效果,比如点击弹出一个div(modal).下拉菜单.旋转木马(carousel或slider),非常适合前端 ...

  4. jQuery2.x源码解析(设计篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...

  5. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...

  6. PowerShell 操作 Azure SQL Active Geo-Replication 实战

    <Azure SQL Database Active Geo-Replication简介>一文中,我们比较全面的介绍了 Azure SQL Database Active Geo-Repl ...

  7. BestCoder Round #89 B题---Fxx and game(单调队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945     问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路:  B ...

  8. [转]ASP.NET应用程序生命周期趣谈(一)

    这几天一直在看ASP.NET应用程序生命周期,真是太难了,我理解起来费了劲了,但偏偏它又是那么重要,所以我希望能给大家带来一篇容易理解又好用的文章来帮助学习ASP.NET应用程序生命周期.这篇就是了. ...

  9. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...

  10. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...