C#基础

1. C# 是一种计算机语言
(1)微软开发
(2)微软为.NET技术平台的开发语言,是由C、C++、Java发展而来的计算机高级语言。
(3)什么是.NET?是微软用来实现XML、Web Services、SOA和敏捷性的技术。
     可以这么说,通过微软开发出来的产品都使用的是.NET技术。
(4)什么是.NET Framework?
    其实.NET是一个比较抽象的概念,.NET Framework就是把.NET落到了实处。
    它是实现.NET这个技术所需要的资源库。C#语言,微软已经提供了大量的资源库(现成的模块)
    ,平时开发的时候,我们只需要调用就行了。我们做开发都是站在巨人的肩膀上。
    它是.NET所需平台,包括虚拟机、即时编译器、类库、各种建立在.NET上的技术,比如ASP.NET 
    WCF WF WPF,也包括语言规范、编程语言等等。(说的简单一下就是它是实现.NET这个技术所需要的资源库)
(5)什么是Visual Studio?
    它是基于.NET Framework的开发的工具(产品)
    
2. C#之父
(1)Anders Hejlsberg
    C#专门为Microsoft.NET程序框架而创造的语言
(2)为什么要学习C#
    C#拥有丰富的类库,对于初学者来说相对来说比较简单的
    C#是完全面向对象的、类型安全的语言
    程序开发的逻辑和面向对象的概念都是一样,C#学好,Java完全不是问题
    对微软产品比较熟悉
3. 学习C#后期可选择的方向
(1)桌面应用程序--Windows Form  窗体
(2)Internet应用程序--Asp.net
    比如:MSDN、CSDN、携程、京东、当当网...
(3)手机应用程序--windows Phone
    现在window phone用的比较少  Android iOS比较多
(4)Unity3D游戏开发或者虚拟现实
    Unity3D后台用的语言是C#
(5)微软产品二次开发:活动目录、SharePoint、Dynamics CRM、Dynamic AX
4. .NET开发环境的搭建
(1)操作系统 windows7企业版以上
(2)数据库平台:SQL Server 2008 R2/2012/2014/2016
(3)软件平台:Visul Studio 2010以上
5. 控制台应用程序
    类似DOS
演示:输入两个小于1000的 正整数,求两个数的和

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyCalculator01
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("我的计算器");                  //Console.WriteLine()输出后带回车的
            Console.WriteLine("========================");
            Console.Write("请输入第一个数字:");              //Console.Write()不带回车
            int num01 = Convert.ToInt32(Console.ReadLine());  //定义个变量num01保存输入的值  因为屏幕输入的是字符串,所以要转换成int
            Console.Write("请输入第二个数字:");              //Console.Write()不带回车
            int num02 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("计算结果:{0}+{1}={2}",num01,num02,num01+num02); //{0}{1}{2}为占位符
            Console.WriteLine("计算完成!!!");
            Console.WriteLine("========================");

            Console.ReadKey();                                //让程序等待
            
        }
    }
}

漏洞分析:
(1)程序存在的漏洞
如果输入的是空格、字母、什么都不输入等非数字字符,软件会崩溃,
(2)题目要求的是输入两个小于1000的正整数,这里输入两个负数照样会等到结果,这叫不符合客户的要求
namespace MyCalculator01
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("我的计算器");  //Console.WriteLine()输出后带回车的
            Console.WriteLine("========================");
            InputNum01:     //标签
            Console.Write("请输入第一个数字:");  //Console.Write()不带回车
            string str01 = Console.ReadLine();

            //判断有没有输入(空格也算没有输入)
            if (str01.Trim().Length == 0)
            {
                Console.WriteLine("没有输入有效的字符!");
                goto InputNum01;
            }

            InputNum02:     //标签

            Console.Write("请输入第二个数字:");  //Console.Write()不带回车
            string str02 = Console.ReadLine();

            //判断有没有输入(空格也算没有输入)
            if (str02.Trim().Length == 0)
            {
                Console.WriteLine("没有输入有效的字符!");
                goto InputNum02;
            }
            //Console.WriteLine("计算结果:{0}+{1}={2}",num01,num02,num01+num02); //{0}{1}{2}为占位符
            Console.WriteLine("计算完成!!!");
            Console.WriteLine("========================");

            Console.ReadKey();   //让程序等待
            
        }
    }
}

6. 代码书写规范
    1)代码中所有的标点都是英文半角
    2)每一行代码以分号结束
    3)所有代码书写大小写敏感
    4)通过fF5来运行所写的程序
    5)可通过生成解决方案来帮助我们来排查语法错误
7. 添加进来的类库要注意框架的匹配
添加进来的类库.NET FRAME框架低于现有项目的版本问题不大,最主要是怕高于现有项目的版本的

8. 进制转换

        static void Main(string[] args)
        {
            //提示用户输入一个十进制数
            Console.WriteLine("请输入一个十进制的数:");
            int num01 = Convert.ToInt32(Console.ReadLine());  //把从键盘接收的数据转换成int 
            Console.WriteLine("{0}的二进制数为:{1}", num01, Convert.ToString(num01,2));
            //{0}{1}为占位符,Convert.ToString(num01,2)的第二个参数为2就表示二进制
            Console.WriteLine("{0}的十六进制数为:0x{1}", num01, Convert.ToString(num01, 16));
            //{1}占位符前面加个0x来标识十六进制数

            Console.ReadKey();
        }

9. 如何存储
内存存储的最小单位(bit,简称b),一位只能存储一个二进制的0或者1
内存分配空间的最小单位是一个字节(Byte,简称B),连续8个bit就是一个Byte

10.编码表
汉字编码表GB2312(1980) 对ASCII码的一个扩充。
Unicode(1994) 包括了全球的语言
UTF-8 对Unicode的一个优化

 

11.数据类型
(1)整型
类型     长度(bit)
sbyte     8        
byte      8        0~255
short     16
ushort    16
int       32
uint      32
long      64
ulong     64

选择数据类型原则:在满足存储数据基本容量要求的情况下,尽量节约空间
例如:存储年龄用long就不合适,太浪费了
用byte最合适,

(2)浮点类型
类型        长度(bit)       精度                       定义和赋值
float        32               7位(指的是有效数字)      float i = 12.5F
double       64               15~16位                    Double i = 15.5D
decimal      128              28~29位                    Decimal i = 12.5M

Decimal类型具有更高的精度和更小的范围,这使它适合财务和货币计算
        static void Main(string[] args)
        {
            float num01 = 3.1415926F;  (注意赋值时要带F,默认是Double类型,不写的情况)
            Console.WriteLine(num01);

            Console.ReadKey();
        }
结果:
3.141593 (精度为7位,包括了小数点前面的)

        static void Main(string[] args)
        {
            float num01 = 3.1415926F;
            double num02 = 3.144544444444785D;
            decimal num03 = 3.1454574876531454666M;

            Console.WriteLine(num01);
            Console.WriteLine(num02);
            Console.WriteLine(num03);

            Console.ReadKey();
        }

 

保留两位小数的两种方法:
可以四舍五入
        static void Main(string[] args)
        {
            float num01 = 3.1495926F;
            double num02 = 3.146544444444785D;
            decimal num03 = 3.1454574876531454666M;

            Console.WriteLine(num01);
            Console.WriteLine(num02);
            Console.WriteLine(num03);

            Console.WriteLine(num02.ToString("0.00"));
            Console.WriteLine(num02.ToString("F2"));
            Console.WriteLine(Math.Round(num02,2));

            Console.ReadKey();
        }
结果:
3.15
3.15
3.15        

(3)布尔类型
类型                      说明              值
布尔类型(bool)          8位              True或者False

(4)字符、字符串
char  --字符  --一个字母,数字,符号,中文
char c1 = 'a'
string str01 = "我爱中国"

类型                  长度       取值范围                      注意
Char(字符型)        16位      双字节编码的任意符号         单引号表示,比如:'1'、','
String(字符串型)    不限      所有unicode能表示的字符串    双引号表示,比如:"iLync.cn"
String的最大长度=2的28次方-1=268,435,455

(5)转义符
是由一个\+特殊字符组成,表示一个特殊意思
转义字符      字符描述          字符的unicode值
\n             换行              0x000A
\'             单引号            0x0027
\"             双引号            0x0022
\t             水平制表符        0x0009
\r             回车              0x000D

例如:

        static void Main(string[] args)
        {
            //
            String str01 = "我爱\n深圳";

            System.IO.File.WriteAllText("D:\\111.txt",str01);
            Console.WriteLine("写入成功!");

            Console.ReadKey();
        }
注意:文件111.txt中的内容并没有换行,转义字符\n在VS中是没有换行
但是要把它写入文件中要用\r\n
(6)@符号的功能
    a.忽略转义字符
    b.识别换行符
    
例如:
        static void Main(string[] args)
        {

            string str01 = "共享目录\\Server01\txt";

    
            Console.WriteLine(str01);
            Console.ReadKey();
        }

//这种情况字符串str01里面有两个转义字符了,分别是\\和\t
        static void Main(string[] args)
        {

            string str01 = @"共享目录\\Server01\txt";

    
            Console.WriteLine(str01);
            Console.ReadKey();
        }
//这种情况会原样输出:共享目录\\Server01\txt
注意:如果字符串里面有""的话,@也没有办法,还是会报错的
        static void Main(string[] args)
        {

            string str01 = @"我叫"Edison"共享目录\\Server01\txt";

    
            Console.WriteLine(str01);
            Console.ReadKey();
        }
//下面这种情况回车一并输出,不会报错,如果没有@的话是不能这么写的
        static void Main(string[] args)
        {
        
            string str02 = @"深圳您好
                                                          我爱深圳";
            Console.WriteLine(str02);
            Console.ReadKey();
        }

(7)日期时间类型
DateTime--用来表示日期时间类型
//获取系统当前时间
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Now;

            Console.WriteLine(dt);
            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            DateTime dt = DateTime.Now;

            Console.WriteLine(dt);
            Console.WriteLine(dt.ToLongDateString());
            Console.WriteLine(dt.ToShortDateString());
            Console.WriteLine(dt.ToShortTimeString());
            Console.WriteLine(dt.ToString("yyyy年MM月dd  hh时mm分ss秒"));  //自定义类型
            Console.WriteLine(dt.ToString("yyyy-MM-dd  hh:mm:ss"));
            Console.WriteLine(dt.ToString("yyyy-MM-dd"));
            Console.ReadKey();
        }
//时间也可以参与运算

(1)单行注释    //注释内容
(2)多行注释    /*注释内容*/
(3)文档注释    ///  让某一个类或方法在被调用的时候出现提示

13. 快捷键
(1)Ctrl+K+D  快速对齐   所选的代码段没有语法错误才能快速对齐
(2)Ctrl+J    快速弹出智能提示   不用重新加点
(3)F6        生成解决方案
(4)F5        运行调试
(5)Ctrl+K+C  注释所选代码
(6)Ctrl+K+C  取消对所选代码的注释
(7)shift+Home选中光标前面的内容   shift+End选中光标后面的内容 还可以配合上下键来用

14. region
用来折叠代码
使用方法:
#region
    代码段
#endregion

15. 如何存储数据
调试时在及时窗口 &变量  查看变量的存储地址和变量值
            byte num01 = 100;
            string str01 = "我爱学习";
            string str02 = "Hello";
            double num02 = 3.1415926D;
            bool b = false;
            int num03 = 9600000;

            Console.WriteLine(num01);   //打印变量
            Console.WriteLine(str01);
            Console.WriteLine(str02);
            Console.WriteLine(num02);
            Console.WriteLine(b);
            Console.WriteLine(num03);

            Console.ReadKey();
            
16. 0x00 00 10 01在内存中的存取方法
先存低位0a,然后00 00 00 
取的时候是先取高位 00 然后 00 00 0a 
这就是栈,先进后出,后进先出
局部变量都是存在栈中的,01   10   00   00
                        [地址]
变量对应的地址就是0a所在的位置的地址。
开始的地址指向栈
(1)内存中的存储顺序和实际的字节表示刚好相反
比如:int i = 10,真实值:00 00 00 0a而存储在内存中0a 00 00 00
(2)负数的二进制数:对应的正数的二进制数每一位取反,再加1
int 型最高位表示符号:1表示负数 ,0表示正数  
-127 :81 ff ff ff
例如:int num01 = -10
对应正数二进制:       0b 00000000 00000000 00000000 00001010
对应正数二进制取反:   0b 11111111 11111111 11111111 11110101
对应正数二进制取反加1:0b 11111111 11111111 11111111 11110110
对应的十六进制为:     0xff ff ff f6
内存中实际存储方式为: 0xf6 ff ff ff
(3)大写的X在内存中的存储
‘X’的对应ASCII为0x58
        static void Main(string[] args)
        {
            char num01 = 'X';
            Console.WriteLine(num01);

            Console.ReadKey();
     
        }
(4)汉字等存储相应的Unicode编码,占用2字节
        static void Main(string[] args)
        {
            char num01 = '陶';
            Console.WriteLine(num01);

            Console.ReadKey();
     
        }
(5)布尔类型
        static void Main(string[] args)
        {
            bool b = true;
            Console.WriteLine(b);

            Console.ReadKey();
     
        }
Bool类型值存储是0或者1,占用一个字节。True -> 01

17. 数据类型
(1)整型
类型   长度
sbyte   8位    -128~127
byte    8位    0~255
short   16位   -32768~32767
ushort  16位   0~65535
int     32位   -2147483648~2147483647
uint    32位   0~4294967295
long    64位   
ulong   64位

12. 变量、输入输出
(1)使用规则:先定义(声明),再赋值,再使用
不定义就使用报错,定义了不赋值同样报错。
定义了,赋值了,但是不使用报警告。我也不建议这样搞,浪费内存空间。
结论:变量声明,赋值,使用三个步骤一个都不能少。
(2)C#变量名是区分大小写的
(3)camel书写方式,第一个单词首字母小写,其他单词首字母大写。
例如:stuName studentMaxAge
(4)输出
Console.WriteLine(输出内容)   //输出后换行
Console.Write(输出内容)       //输出后不换行
(5)输入
Console.ReadLine()  //接收键盘输入的一个字符串,直到回车结束

        static void Main(string[] args)
        {
            int num01 ;
            Console.Write("请输入num01的值:");
            num01 = Convert.ToInt32(Console.ReadLine());  //因为Console.ReadLine()返回的值都是字符型,
                                                          //即把键盘输入的那些当做字符,所以要转换成int
                                                          //接收直到回车时才结束
            Console.Write("num01的值为:{0}",num01);
 
            Console.ReadKey();
        }
Console.Read()  //输入一个字符,返回的是这个字符的编码值
                //输入多个字符没有用,只会返回第一个字符的编码值
        static void Main(string[] args)
        {
            Console.Write("请输入一个字符:");
            int charCode = Console.Read();

            Console.Write("你输入的字符为:{0}",charCode);
 
            Console.ReadKey();
        }
Console.ReadKey()  //获取用户是否按下一个字符或者功能键
                   //没有获取就一直卡在这里
                   
       static void Main(string[] args)
        {
            Console.Title = "输入输出案例";                  //设置Console标题
            Console.WindowHeight = 20;                   //设置Console窗口的高度
            Console.WindowWidth = 40;                    //设置Console窗口的宽度
            Console.BackgroundColor = ConsoleColor.DarkGray;        //设置背景颜色
            Console.ForegroundColor = ConsoleColor.Yellow;            //设置前景色
            Console.Write("请输入姓名:");                                           //提示输入姓名
            string str = Console.ReadLine();                //把键盘输入的字符串赋值给str变量
            Console.ResetColor();                                //重新颜色设置
            Console.BackgroundColor = ConsoleColor.Green;             //重新设置背景色
            Console.ForegroundColor = ConsoleColor.Red;                //重新设置前景色
            Console.WriteLine("我的姓名是:"+str);    //输出文字
            Console.WriteLine("Press any key to Continue...");

 
            Console.ReadKey();
            Console.ReadKey(true);
        }
(6)占位符
输出的时候先挖坑,然后通过后面的变量填坑
        static void Main(string[] args)
        {
            string name = "张三", address = "上海市闵行区金都路18号";
            int age = 34;
            Console.WriteLine("我叫{0},我今年{1}岁了,我家住在{2}", name, age, address);

            Console.ReadKey();
        }
占位符的编号必须从0开始,然后1,2,3,4,5依次进行挖坑
挖的坑和填的坑数量保持一致,一一对应,注意:挖的坑有多少不是说这里的大括号有多少,而是指大括号里面
的数值有多少。

        static void Main(string[] args)
        {
            //三心二意,一心一意,三阳开泰

            Console.WriteLine("{0}心{1}意,{2}心{3}意,{4}阳开泰", '三', '二', '一','一','三');

            Console.ReadKey();
        }

里面有重复,可以合并,还可以这么写
        static void Main(string[] args)
        {
            //三心二意,一心一意,三阳开泰

            Console.WriteLine("{0}心{1}意,{2}心{2}意,{0}阳开泰", '三', '二', '一');

            Console.ReadKey();
        }

13. 变量类型转换
类型转换种类:
(1)自动类型转换,或者称为隐形类型转换,比如short转为int
        static void Main(string[] args)
        {
            short num01 = 121;
            int num02 = num01;

            Console.WriteLine(num02);  //可以自动转换

            Console.ReadKey();
        }
        
        static void Main(string[] args)
        {
            
            float float01 = 3.1415F;
            double double01 = float01;

            Console.WriteLine(double01);  //可以自动转换

            Console.ReadKey();
        }
(2)手动类型转换,或者称为强制类型转换(类型基本兼容),比如double转为float

        static void Main(string[] args)
        {
            double double01 = 3.141592645D;
            float float01 = double01;           //无法自动转换,double转float精度丢失

            Console.WriteLine(float01);

            Console.ReadKey();
        }

结论:如果是后面这种类型包含了前面的类型,不会出现数据的丢失,自动转换就没问题
否则就需要强制转换。

(3)手动类型转换,或者称为强制类型转换(类型不兼容)比如:string转为int

        static void Main(string[] args)
        {
            int num02 = 1234;
            string str01 = num02;    //不能转换

            Console.WriteLine(str01);

            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            int num02 = 1234;
            string str01 = (string)num02;//也不行

            Console.WriteLine(str01);

            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            int num02 = 1234;
            string str01 = Convert.ToString(num02);  //可以了

            Console.WriteLine(str01);   

            Console.ReadKey();
        }
(4)类型不兼容的类型转换
字符串->其他  Parse、TryParse

(5)其他->字符串 ToString()
(6)任意->任意  Convert


14. 变量的作用域
局部变量作用范围在{}内
        static void Main(string[] args)
        {

            for (int i = 0; i < 5; i++)
            {
                string text = "Line" + i.ToString();
                Console.WriteLine(text);
            }

            Console.WriteLine(text);  //找不到text

            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            string text = "123";
            for (int i = 0; i < 5; i++)
            {
                text = "Line" + i.ToString();
                Console.WriteLine(text);
            }

            Console.WriteLine(text);

            Console.ReadKey();
        }

15.常量
常量的值在程序运行之前初始化的时候给定一次,
以后都不会变了,以后一直是这个值。
        static void Main(string[] args)
        {
            const int num01 = 5; 
            num01 = 1;          //局部常量不允许修改
 
            Console.ReadKey();
        }

        static void Main(string[] args)
        {
            const double pi = 3.1415926D;
            Console.WriteLine("请输入圆的半径:");
            double radius = Convert.ToDouble(Console.ReadLine());

            double perimeter = 2 * pi * radius;
            double area = pi * radius * radius;

            Console.WriteLine("半径为{0}的圆的周长为:{1}面积为:{2}", radius, perimeter, area);

            Console.ReadKey();
        }

窗体实现

        private void btnCalc_Click(object sender, EventArgs e)
        {
            const double pi = 3.1415926D;
            double radius = Convert.ToDouble(this.txtRadius.Text.Trim());
            this.lblPerimeter.Text = (2 * pi * radius).ToString("F5");
            this.lblArea.Text = Math.Round((pi * radius * radius),5).ToString();
        }

第二季

1. 面向对象(OOP Object-Oriented Programming)
JavaScript  C++ Python3 C# 都是面向对象编程
(1)面向对象的核心思想:
使用了许多代码的模块,每个模块只提供特定的功能,他们彼此独立,这样大大提高了
代码的重用几率,也更加有利于软件的开发、维护和升级

开发软件的本质就是为了记录信息、处理信息、存储信息、输出信息的过程
如何更好的“记录信息”是重中之重

没有填写数据的表格(比如员工入职登记表)就是类
每一个填完数据的表格就是一个对象

多个变量(和方法)的集合就是一个类
使用类描述的一个具体人就是对象

类:从本质上来讲也是一种数据类型,是多个基础数据类型的集合

  class Program
    {
        static void Main(string[] args)
        {
            //张三,Abby
            Person zhangsan = new Person();
            zhangsan.name = "张三";
            zhangsan.gender = "男";
            zhangsan.birthday = Convert.ToDateTime("1995-03-01");
            zhangsan.color = "黄";
            zhangsan.job = "系统工程师";
            zhangsan.nationality = "中国";

            Console.WriteLine("姓名:{0},性别:{1},出生日期:{2},肤色:{3},职位:{4},国籍:{5}",
            zhangsan.name, zhangsan.gender, zhangsan.birthday, zhangsan.color, zhangsan.job, zhangsan.nationality);

            Console.ReadKey();
        }
    }
    class Person   //定义的类
    {
        public string name;   //类的成员
        public string gender;
        public DateTime birthday;
        public double height;
        public string color;
        public string job;
        public string nationality;
    }

 class Program
    {
        static void Main(string[] args)
        {
            //张三
            Person zhangsan = new Person();
            zhangsan.name = "张三";
            zhangsan.gender = "男";
            zhangsan.birthday = Convert.ToDateTime("1995-03-01");
            zhangsan.height = 1.75;
            zhangsan.color = "黄";
            zhangsan.job = "系统工程师";
            zhangsan.nationality = "中国";

            zhangsan.SayHello();

            Console.ReadKey();
        }
    }
    class Person   //定义的类
    {
        //静态特征:字段(field)
        public string name;   //类的成员
        public string gender;
        public DateTime birthday;
        public double height;
        public string color;
        public string job;
        public string nationality;

        //动态特征:方法(method)  其他语言我们叫函数
        public void SayHello()
        {
            Console.WriteLine("大家好!很高兴认识大家,我叫{0},我是{1}生,我的出生日期为{2},我的身高为{3}m,我是{4}种人,我的工作是{5},我是{6}人"
               , name, gender, birthday, height, color, job, nationality);
        }
    }
 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值