c#学习笔记

目录

  • 写在开头
  • 1. 基础总结
    • (1)格式转化
    • (2)输入输出语句
    • (3)判断语句的变化
    • (4)数据类型
      • a)值类型:
      • b)引用类型
    • (6) 运算符与表达式
    • (7)流程控制语句
      • 设计一个会画圆的小程序
    • (8)数组
      • (a)一维数组声明方式:
      • (b)c#中声明数组时不能指定其长度,如:
      • (c)数组定义与数组元素分配空间并赋值的操作分开进行。
      • (d)静态初始化
      • (e)数组元素默认初始化
      • (f)foreach语句
      • (g)复制数组
      • (h)多维数组
      • (i)交错数组
  • 2. 属性的get和set方法
  • 3. 继承
    • 使用base
    • as运算符
    • is运算符
  • 4. 修饰符
    • readonly
    • sealed
  • 5. 接口
    • 实现接口
  • 6. 结构及枚举
    • 随手记的小知识

写在开头

这篇文档只是我课后整理所学知识,方便自己期末复习,所以如果能帮到您那是我的荣幸,有明显错误,也欢迎大佬指正提出。如果觉得太过粗浅实乃正常,望谅解
网上视频教程我看的是mooc上唐大仕老师的《c#程序设计》,很多例子在老师课程中有的。

1. 基础总结

(1)格式转化

int a = 1;
string str = a.ToString(); //将a转化为字符串
int b = int.Parse(str); //将str转化为int
int c = Convert.ToInt32(str); //将str转化为int

(2)输入输出语句

输出语句快捷键:cw,再按两次Tab

string str2 = Console.ReadLine(); //输入格式
Console.WriteLine(str2); //输出格式
//这是格式化输出形式,a输出两次
Console.WriteLine("a={0}{0}", a);
//这是格式化输出形式,a, b, c分别输入012中
Console.WriteLine("a={0}"+"b={1}"+"c={2}", a, b, c);
//这种输出形式下,括号内可进行表达式运算
Console.WriteLine($"a={a}" + $"sum={a+b+c}");

(3)判断语句的变化

c#没有非零即真的说法,if必须产生一个bool值

c#学习笔记_第1张图片

switch得到了加强,可以使用字符串进行判断

c#学习笔记_第2张图片

(4)数据类型

a)值类型:

包括:

  • 简单类型 又分为 整数类型、实数类型、十进制类型、布尔类型

  • 结构类型

  • 枚举类型

b)引用类型

包括:

  • 类类型
  • 接口类型
  • 委托类型
  • 数组类型

(6) 运算符与表达式

与各种语言大同小异,这里直接转载大佬整理的笔记,有需要的可以仔细研读。
C#中的表达式与运算符
运算中的类型转换
具体需要注意的是,当有不同种类的混合运算时:
int->long->float->double
int之下,所有的byte,short,char等运算时都会转为int。
运算符优先级与结合性
单目>算术>关系>逻辑>三目>赋值

(7)流程控制语句

唐老师视频中流程控制语句有一些容易忘的东西,把这些记录下来希望自己能记住。

设计一个会画圆的小程序

c#学习笔记_第3张图片
代码如下,一个button点击事件和一个随机颜色的方法:

private void button1_Click(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics(); //拿到画笔

            int x0 = this.Width / 2;
            int y0 = this.Height / 2;

            for(int i=0; i<this.Height/2; i++)
            {
                // g.DrawEllipse(new Pen(getRandomColor(), 边框宽度), 左边边界, 右边边界, 圆的宽, 圆的高);
                g.DrawEllipse(new Pen(getRandomColor(), 1), x0 - i, y0 - i, i * 2, i * 2);
            }
            g.Dispose(); //释放画笔
        }

        Random rnd = new Random();
        private Color getRandomColor()
        {
        //256是因为next会取0-255,下限是不取的,如果后面+1,则取值范围为1-256
            return Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
        }

这里主要是有关graphics的一点点用法,以及random.next的取值范围问题。

(8)数组

(a)一维数组声明方式:

  • int[] a; 注意方括号写到变量名前面
  • double []b;

(b)c#中声明数组时不能指定其长度,如:

  • int a[5]; 是非法的

©数组定义与数组元素分配空间并赋值的操作分开进行。

  • int []a = new int[3];
  • a[0] = 3;
  • a[1] = 9;
  • a[2] = 8;

(d)静态初始化

  • int[] a = {3,9,8};
  • int[] a = new int[]{3,9,8};

(e)数组元素默认初始化

  • int []a = new int[3]; 此时数组内的数已经默认都为0了

(f)foreach语句

int []as = new int[3];
foreach(int a in as)
{

}
foreach是只读式遍历

(g)复制数组

//源数组
int[] source = {1,2,3,4,5,6};
//目的数组
int[] dest = {10,9,8,7,6,5,4,3,2,1};
//复制源数组中从下标0开始的source.length个元素到目的数组,从下标0开始存储
Array.Copy(source,0,dest,0,source.Length);

(h)多维数组

int[,] a = {{1,2,3},{4,5,6},{7,8,9}};

(i)交错数组

c#中交错数组是数组的数组
int[][] t = new [3][];
t[0] = new int[2];

前面一个括号是数组的个数,不能缺少,如果写成int[][] t = new [][3]是错误的

2. 属性的get和set方法

private String _name;
public String Name{
	get{
		return _name;
	}
	set{
		_name = value;
	}
} 

可简写为

public String Name{set; get;}

3. 继承

class SubClass : BaseClass{
...
}

c#中,类的继承是单继承,一个类只能继承一个父类。
所有类都直接或间接地继承了Object类。

使用base

相当于java中的super。

void sayHello(){
	base.sayHello(); //调用父类的sayHello方法
}
Student(string name, int age, string school) : base(name, age){
	//调用父类的构造方法,把父类的姓名年龄赋给子类
	this.school = school;
}

as运算符

可作为类型强转的方法,若不能转换,产生的值为null.

Person p1 = new Person();
Student s3 = p1 as Student; //父类不能强转为子类,s3 = null;

与强制类型转换的区别:

  • as只能针对引用型变量
  • 如果不能转换,as不会引起异常,只是值为null

is运算符

if(p is Person) //判断一个对象是不是某个类(及其子类)的实例。

4. 修饰符

readonly

readonly相当于不可改量,只能赋一次值。
在构造方法中赋值,或在声明时就赋值。

sealed

sealed类,不可继承。

5. 接口

实现接口

class 类名 : [父类, ]接口, 接口, ......, 接口{
	public 方法(){......}
}

6. 结构及枚举

struct是值类型

  • 结构不能包含无参数构造方法
    Point p; s.X = 100;

  • 每个字段在定义时,不能给初始值

  • 构造方法中,必须对每个字段进行赋值

struct是sealed的,不能被继承。
引用类型例如string,变量在赋值时,例如s1 = s2,是将s2在堆的引用地址给s1,如果s2的值发生改变,s1也会跟着改变,因为他们指向的是堆里同一个变量。
但是值类型,例如stuct,在变量赋值是,会在堆中复制一个新的变量,并将他的地址给s1,所以如果s2改变,变得只是s2,和s1没有关系。

随手记的小知识

C#与c++不同,它的任何变量如果要在后面使用,必须要先初始化

Blend for Visual Studio 2019是用于设计界面的,常规学习用Visual Studio 2019就行

c#方法都是大写开头,string类开头是小写,这些都与java相反

svm可以快捷创建Main方法

FromArgb可修改颜色。

button2.BackColor = Color.FromArgb(255, 255, 0);

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