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);}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部