2021-07-26 c#基础

c#基础

电气工程师:现场设备间接接线安装,调试,经常出差

上位机工程师:主要设计项目,写程序

  • 学习内容:
    1,熟悉c#的编程语言

2,熟悉一门数据库

3,熟悉掌握各种常用的通信协议

4,自定义控件的开发技术(UI设计)

5,掌握上位机数据采集,通信控制,数据存储,数据报表,和分析等

  • 条件:

项目类型: 控制台,类库,windows,wpf,asp.net

项目框架:.net framework

调试

Debug:调试 F11逐句

在设置好断点后,调试程序可以直接按 F5 键,或者直接在菜单栏中选择“调试”→“开始调试”命令。

在调试程序的过程中,可以直接使用工具栏上的调试快捷键,如下图所示,或者直接在菜单栏中选择所需的调试命令。

调试快捷键菜单

下面介绍常用的调试命令。

  • 逐语句(逐语句):按 F11 键也可以,用于逐条语句运行。
  • 逐过程(逐过程):按 F10 键也可以,过程是指可以将方法作为一个整体去执行,不会跳进方法中执行。
  • 跳出(跳出):按 Shift+F11 组合键也可以,跳出是将程序的调试状态结束,并结束整个程序。

Release:发布

  • 项目生成和运行过程分析

    c#代码文件—》编译器csc.exe 程序集exe或dll----》JIT编译器,编译成机器码–》x86机器码 —》操作系统

    c#可以和其他语言一起运行

  • 命名空间和类库:一个命名空间可以包含多个类,一般用一个

  • 先引用后引入再使用

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NglYo5j2-1627303566067)(C:\Users\35661\AppData\Roaming\Typora\typora-user-images\image-20210710090655789.png)]

业务代码必须放到方法中,

  • c#常用数据类型

    数值和非数值:数值(int,double),非数值(string,bool,Data Time)

  • 变量的概念:表示一个数据存储空间,内存地址的别名

    static void Main(sring[] args){

    ​ test();

    ​ Console.ReadLine();//获取当前用户输入的数据,获取的都是字符串类型

    }

    Console.WriteLine(“科目”+subject+”分数:“+score) 自动输出换行

    Console.Write("")输出不换行

  • ctrl +k+d 快速格式化

    • 自我解决问题:右击转到定义,或者,定位到当前关键词,通过msdn 按F1
  • 代码折叠:#region +注释 #endregion

  • object是万能数据类型 (int)(double)a 自动类型转换需要都是同一种数据类型才能转换。

  • 显式类型转换

    方法 描述
    ToBoolean 如果可能的话,把类型转换为布尔型。
    ToByte 把类型转换为字节类型。
    ToChar 如果可能的话,把类型转换为单个 Unicode 字符类型。
    ToDateTime 把类型(整数或字符串类型)转换为 日期-时间 结构。
    ToDecimal 把浮点型或整数类型转换为十进制类型。
    ToDouble 把类型转换为双精度浮点型。
    ToInt16 把类型转换为 16 位整数类型。
    ToInt32 把类型转换为 32 位整数类型。
    ToInt64 把类型转换为 64 位整数类型。
    ToSbyte 把类型转换为有符号字节类型。
    ToSingle 把类型转换为小浮点数类型。
    ToString 把类型转换为字符串类型。
    ToType 把类型转换为指定类型。
    ToUInt16 把类型转换为 16 位无符号整数类型。
    ToUInt32 把类型转换为 32 位无符号整数类型。
    ToUInt64 把类型转换为 64 位无符号整数类型。
  • 强制类型转换:字符串和值类型之间

    方法:目标类型 变量 = 目标类型.Parse(“字符串的有效表示”)

    // 只有有效的字符类型,才能转换成对应的值类型。有效的:也就是说字符串内容必须符合目标类型。

    double a= double.Parse(“100.5”);(parse只适合字符串到值类型)

    float b = float.Parse(“20.25”);

    int c = int.Parse(“500”)

    int d = int.parse(“10.1”)错误

    值类型默认的值为0;

    int b = (int)double.Parse(“199.3”)

    string s1 = b.ToString*()

    • 万能转换器Convert 适合所有类型转换

      float a = Convert.ToSingle(“19.19”);

      double b = Convert.ToString(“19.1”);

      int c = Convert.ToInt32("")

      int d = (int)Convert.ToDouble(“19.11”);

  • 运算符中的三目运算符

  • continue 与break

    continue 退出当前循环,开始下一次新的循环,,只能用于循环

    break 退出整个循环。

字符串

找下表:IndexOf("@") 未找到为-1

截取:Substring(开始,结束); email.Substring(0, email.IndexOf("@"))

email.Substring(email.IndexOf("@")+1) 获取后缀

长度:Length

相等:name1.Equals(name2)//Equals区分大小写,为Boolean

空字符串:string name1 = ”“;string name2 = string.Empty

去空格:Trim()

全部转为小写:ToLower()

全部转为大写:ToUpper()

LastIndexOf(".")

分割:Split() string[] dataArray = data.Spilit()

重新组合:Join string newData = string.Join("-",dataArray)

StringBuilder字符串高效处理:(对象)

​ StringBuilder builder1 = new StringBuilder(“默认值”);

​ builder1 .Append("ab”)//追加

​ builder1 .Clear()’

​ builder1 .AppendFormat(“主讲老师:{0}课程周期:{1}”,teacher,month)

​ builder1 .Insert(0,”中国的“);插入

​ bulider1.Insert(builder1.ToString().Length,“大家要努力”)

​ builder1.Delete(index)

ps:1.属性首字母要大写

​ 2.报错:下面整个会出现错误:System.NullReferenceException:“未将对象引用设置到对象的实例”

​ string 其实是String的一个别名,在使用是需要实例化,如果是null则没有办法调用方法和属性

数组

​ 数组是一个对象类型

​ string[] arr = new String[]{”1“,”2“};

foreach(int score in score1){

​ sumScore = score;

}// 不考虑循环次数情况下可以使用foreach

avgScore = sumScore/score1.Length;

报错:索引超出数组界限==》索引超出最大索引值

int[] netScore1 = new int[3]{90,56,78};

int myscore = newtScore1[3];

初始长度跟使用长度不一致

ps:大写是底层的,小写是c#关键字

常量

1,初始化要赋值

2,常量都要大写

const double API = 1.1;

enum枚举

星期枚举

定义到累的外面

public enum Gender{

​ Male:1,

​ Female:0,

}

引用:Gender gender = Gender.Female;

​ int a = (int)gender;

debug程序调试各种技巧

调试逻辑错误:能运行但是没有得到结果

1,直观法:一眼就看出来

2,打断点:预估程序可能在哪里出现问题。或者在程序入口处

f11,逐句输出

两个断点之间不想再逐行调试可以按f5直接跳过

在方法前后打两个断点会单独测试该方法

F10,可以直接跳过某个方法的调用。

F11, 如果遇到方法调用,会进入方法内部逐条

构造函数

calss User
{
	public User(string name,string password,string tel){
        this.Name = name;
        this.Password = password;
        this.Tel = tel;
    }
    public string Name{get;set;}
    public sting Password{get;set;}
    public sting Tel{get;set;}
    public void PrintMsg(){
        Console.writeLine("用户名:"+ this.Name);
        Console.WriteLine("密码:"+this.Password);
        Console.WriteLine("手机号:"+this.Tel);
    }
}

在main方法中调用方法的代码如下:

class Program
{
	static void Main(string[] args){
	User user = new User("小明",“124”,“12121212”);
}
}

析构函数

~User(){
	Console.WriteLine("调用了析构方法");
}

重载函数

class SumUtils
{
    public int Sum(int a,int b)
    {
        return a + b;
    }
    public double Sum(double a,double b)
    {
        return a + b;
    }
    public string Sum(string a,string b)
    {
        return a + b;
    }
    public int Sum(int a)
    {
        int sum = 0;
        for(int i = 1; i < a; i++)
        {
            sum += i;
        }
        return sum;
    }
}

方法调用

class Program
{
    static void Main(string[] args)
    {
        SumUtils s = new SumUtils();
        //调用两个整数求和的方法
        Console.WriteLine("两个整数的和为:" + s.Sum(3, 5));
        //调用两个小数求和的方法
        Console.WriteLine("两个小数的和为:" + s.Sum(3.2, 5.6));
        //调用两个字符串连接的方法
        Console.WriteLine("连个字符串的连接结果为:" + s.Sum("C#", "方法重载"));
        //输出 1 到 10 的和
        Console.WriteLine("1 到 10 的和为:" + s.Sum(10));
    }
}

c#形参与实参

案例:

class OutClass
{
    public void Judge(int num, out bool result)
    {
        if (num % 5 == 0)
        {
            result = true;
        }
        else
        {
            result = false;
        }
    }
}

在 Main 中调用该方法,代码如下。

class Program
{
    static void Main(string[] args)
    {
        OutClass outClass = new OutClass();
        bool rs;
        outClass.Judge(20, out rs);
        Console.WriteLine(rs);
    }
}

你可能感兴趣的:(学习笔记,c#)