认识c#与.net的概念

/// <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快捷键能够打开代码提示框
        }

    }
}
原文地址:https://www.cnblogs.com/longxinyv/p/14396026.html