/// <summary>
/// .net与c#的概念:
/// .net/dotnet:一般指的是.NetFrameWork框架。net是一个平台(厨房里面什么都没有);框架就是一种技术(厨房需要的柴米油盐,工具等等);在平台上开发框架(这个就可以做出一道菜)
/// .netframwork框架是.net平台不可缺少的一部分,它提供了一个稳定的运行环境保证我们基于.net开发的各种应用能够正常运转。
/// c#编程语言:老外问路,他听不懂中国话,你需要一种说一种他听得懂的语言告诉他怎么走。然而计算机能听懂的就是编程语言。
/// (学习java的使用的是java平台,语言也是java语言。所以常说java是一个平台也是一种编程语言。而学习net使用的平台是net平台,net使用的语言是c#语言。如果.net应用脱离了c#编程语言是无法运行的)
/// C#(sharp):英文CSharp是一个强大的【面向对象】程序开发语言开发语言,是专为.NET开发而设计的一门语言,c#需要运行到.net提供平台的开发环境上,开发工具是vs(安装时里面同时安装好对应的框架版本)
/// C#能为我们做的事情:1.桌面应用程序,2.web服务程序,3.Internet应用程序,4.Windows的服务程序。
/// .net能干什么:桌面应用程序winform开发,Internet应用程序asp.net网站开发,手机开发wp8,unity3D游戏开发或者是虚拟现实。
/// .net的两种交互模式:1.C/S:客户端Client/服务器Server(如:QQ需要安装一个软件);2.B/S:浏览器Browser/服务器Server(典型例子网站:客户端上只需要安装一个浏览器就可以访问)
/// .NetFrameWork:微软推出的一个平台,c#支持的一些特性.net不支持,.net支持的一些特性c#又不支持,所以c#是.net的代码,但不是.net的一部分。
/// .NetFrameWork的组成(两个部分):1.基类库(FCL):综合面向对象可重用的一个集合(前辈们封装好的代码),可使用它开发多种应用程序。2.公共语言运行时(CLR):看做一个执行时管理代码的代理,于管理内存,线程执行,代码执行,编译等服务。
/// .NetFrameWork代码编译过程,源代码执行要经过(二次编译):第一次编译由源码程序编译为“中间语言(MSIL)”,第二次编译在由中间语言编译成能够被CPU直接执行的“机器代码”;
///公共语言运行时:1.公共语言规范(CLS):详细说明了一个.net兼容编译语言的规则,属性和行为。2.公共类型系统(CTS):定义了那些在托管代码中一定会使用的类型特征。最重要的特效之一所有数据类型都继承至公共的基类--->Object类。
///相对Windows而已,做了以下改进:1.面向对象开发环境。2.自动垃圾回收器(如:CLR有一项服务垃圾收集,自动管理内存)。3.互操作性:允许不同的.net编写软件模块间无缝交互。
///4.简化部署:程序不需要注册表注册,只需要将程序复制到目标计算机上即可运行。5.类型安全。6.框架类库:在写程序时可以使用一些丰富代码库(前辈们写好的代码,需要时直接调用)
/// </summary>
//面向过程:这个程序里面的每个功能,这个功能的每一个实现步骤,都需要我们自己去完成。----------c语言就是面向过程语言
//面向对象:给我们提供了一些已经打包好的函数和方法,我们需要这些功能可以直接通过调用来实现就可以了。至于这个功能如何实现的,不需要我们去关心。只需要会用就可以了----比如:C#,Java....
//面向过程:面向的是完成这件事情的一个过程,强调的是完成事情的一系列动作。如:把对象放进冰箱里的一个过程。强调动作1.首先要打开冰箱门,2.在把大象放进去,3.最后关闭冰箱门。
//假如张三去处理刚好能操作,而李四他太矮了没办法操作,需要借助凳子,才能把大象放进冰箱。
//如果使用面向过程思想来解决问题,如果执行这件事情的人不同,我们就需要为每个人都去量身定做解决事情的方法。对应每个人代码都不同。
//面向对象:找个对象不能做事情。意在写出一段通用代码,屏蔽差异。
//如:冰箱可以被打开,大象可以被放进冰箱,冰箱门可以被关闭。不管是谁的可以做这件事情。
//对象思维:在数学家眼里为马上理想到数字。程序员而言万物皆对象。
//关门:面向过程是主动的:张三轻轻地把门带上了,李四一脚把门踹紧了。面向对象是被动的就一句代码解决所有人的关门:没可以被关闭。
//对象的特征:对象必须是看得见摸得着的,我们描述一个对象,通常是通过对象的属性和方法去描述的。如钢笔是对象,属性(值):一只红色的钢笔,带图案的钢笔等等。方法(行为,执行的操作)
//类(相当于设计图子):就是一个模板。把一些具有相同属性和方法的对象进行了封装,抽象出来 类 的这个概念。
//对象(设计结果)对象是根据类创建出来的事物(先有类在有对象):人类,孙权是人类中的对象,属性就是,姓名,年龄,身高等等一系列特征,方法(行为,动作,执行的一系列操作):打仗等等。
//类是对象的抽象形式(抽象的:想像出来的模板),对象是类的具体形式(通过模板创造出来的实实在在的对象):由类这个模板创造出来的对象一定是相似的,(如飞机图纸,怎么都只能创造出来不同的飞机对象)
using System;//using引入:为我们导入c#给我吗提供一些函数,或是现有的一些类;整体叫引入命名空间:命名空间就是namespace 项目名那个,这里的引入是c#给我吗封装好的命名空间 using System.Collections.Generic;//引用了命名空间也就意味着可以使用这个命名空间下面的类。也就是说引用命名空间就是要使用他的类,不用就没有意义 using System.Linq; using System.Text; using System.Text.RegularExpressions;//正则表达式方法Regex.Replace()所在的命名空间 using System.Threading.Tasks; namespace CSharp //namespace 表示:命名空间,创建好一个下面后,会自动给项目创建一个命名空间,所以同一个命名空间下只能有一个入口Main函数 跨命名空间的使用就要 using引用命名空间 { /// <summary> /// 类:对象的集合(实例化对象就是调用这个类使用他的方法函数,例子 实体类被调用的时候),对象:具有明确的状态和行为。 /// 类是抽象的,对象是具体的。区别:类是对象的抽象形式,对象是类的具体形式。 比如:月饼膜拜是一个类,做出来的月饼就是一个对象 /// </summary> class Demo2 { /*访问修饰符 public:公共的,所有程序集都可以访问(其他程序集访问需要引入命名空间才可以) internal:当前程序集可以访问 protected:受保护的,当前类和子类可以访问,子类实例化对象时点不出来。但是可以访问。不会报错,相当于隐藏了属性。 private:私有的,只能是当前类可以访问 类的访问修饰符(两种):public internal(默认) 类的成员访问修饰符(4种):public internal protected private(默认) */ //静态的只能引用静态的,实例方法既可以引用静态的也可以引用实例的。 public static string ussssn = "静态的static关键字"; //调用:静态的不需要实例化对象直接可以通过 类名.成员() 就可以点出来, 普通成员调用:对象名.成员名 在调用前必须实例化对象 //静态成员:属于整个类 (相当于所有对象共享), 实例成员属于当前所承建的对象(每个对象都有自己不同的特性的一个值,比如:实体类就不能是静态的) //区别:静态类不能被继承,非静态类可以。 静态类中所有成员必须是静态的,非静态类中不限制即可以是静态也可以是非静态的 /// <summary> /// Main:一个程序的入口函数,不行有入口函数,不然程序找不到门;static 表示静态的方法 void表示没有返回值 /// </summary> /// <param name="args">数组参数</param> static void Main(string[] args)//主方法在整个项目中有且只有一个。 { Console.WriteLine("Console:表示控制台,Write:表示输出,Line:表示一行不需要换行就补加Line即可"); //c#提供两种方式输出变量 Random rd = new Random();//随机数因子,实例化对象:由类转换成一个对象的过程,关键字new 语法:类名 对象名 =new 类名(); 此时类就变成了一个具体的对象。 int rrr = rd.Next(1, 10);//表示1-10的随机数, 访问类的成员:对象名.成员名来访问的 const string st = "常量关键字const程序执行结束都不发生改变,只能被赋值一次,而且定义了就必须赋值,比如圆周率=3.14不会改变"; Console.WriteLine("输出随机数:" + rrr); Console.WriteLine("占位符输出:{0},{1}", rrr, st);//如果多变量从{0}{1}...开始索引每个变量 //foreach遍历 string stss = " Hello this is a test";//转义字符/n是换行在苹果系统和控制台有用,但是打印到Windows系统文本里没效果的必须要 才能换行。 foreach (char itme in stss)//char是字符类型,每次只放一个字符;string类型不限制 { Console.WriteLine(itme); //打印出每个字符 } /*转义字符 * :表示换行, :Windows不认识 只认识 ,苹果系统认识 * :表示tab建的空格。:表示退格键,放在字符串两边没效果。":表示可以在字符串输出引号。 * \表示取消的转义作用输出一个路径的时候用,另外如果麻烦的换行@"字符串路径"就不需要添加只要在字符串前面加@符号,告诉双引号里面是字符串,字符串就会原样输出。 */ Console.WriteLine(stss.StartsWith(" Hello"));//判断是否以Hello字符串开始 Console.WriteLine(stss.EndsWith("Hello"));//判断是否以Hello字符串结束 Console.WriteLine(stss.Contains("Hello"));//判断字符串中是否包含指定字符串,只要出现就返回true Console.WriteLine(stss.Equals("Hello"));//完全等价于关系运算符的 stss == "hello" 是否完全相等,返回true/false Console.WriteLine(stss.IndexOf("lo")); //索引小标位置, 类似于模糊查询,通常用作判断 stss.IndexOf("lo") > -1 表示索引不到值,不存在 Console.WriteLine(stss.LastIndexOf("lo"));//和上面一样也是索引,返回的是最后一个出现的位置 Console.WriteLine(stss.IndexOf("lo", 2));//从第二个下标开始查找 Console.WriteLine(stss.Insert(2, "你好!"));//在第二个下标位置插入 你好 Console.WriteLine(stss.Remove(2, 3));//删除字符串Remove(开始, 结束) 也可以只有一个开始下标 Remove(开始) 默认结束是最后。也就是开始后面的全部删除。 Console.WriteLine(stss.Substring(2, 3));//截取字符Substring(开始,结束) 也可以只有一个开始下标 Substring(开始) 默认结束是最后。 Console.WriteLine(stss.Replace("llo", "aaa"));//替换字符 Console.WriteLine(stss.ToLower());//字符串转小写 Console.WriteLine(stss.ToUpper());//字符串转大写 Console.WriteLine(stss.Trim());//清楚字符串的左右两边空格 Console.WriteLine(stss.TrimStart());//清楚字符串的前面空格 Console.WriteLine(stss.TrimEnd());//清楚字符串的后面空格 Console.WriteLine(Regex.Replace(stss, @"s", ""));//利用正则表达式清楚字符串所有空格 //用法 string url = "http://www.baidu.com/index.html"; Console.WriteLine("网址中的协议是:" + url.Substring(0, url.IndexOf(":"))); Console.WriteLine("网址中的协议是:" + url.Substring(url.LastIndexOf("/") + 1)); if (!string.IsNullOrEmpty(stss))//判断字符串释放有值,可以可以判断空值null或者“” ,这里判断字符串是否为空,加!表示非空。 { string[] arr = stss.Split(' ');//拆分字符串,以空格拆分 Console.WriteLine("arr数组长度为:{0}", arr.Length);//同样字符串也有长度 foreach (string itme in arr) { Console.WriteLine(itme); } Console.WriteLine(string.Join(":", arr));//把一维数组里面的值链接成字符串 } Console.ReadKey(); Console.ReadLine();//利用接收输入来暂停程序,避免程序一闪而过 //Ctrl+J快捷键能够打开代码提示框 } } }