C# 基础学习(输入输出、数据类型、控制语句、方法、数组、字符串、结构体、枚举、类)

C# 基础学习

    • I. 输入输出
    • II. 基本数据类型
      • i. 数据类型转换
    • III. 运算符
    • IV. 控制语句
      • i. C#中if-else if-else、switch、for、do-while、while的使用方法和C语言相同
    • V. 封装
    • VI. 方法
      • i. Main方法
      • ii. 方法的定义:
      • iii. 方法的调用:
      • iv. 参数传递的三种方法
        • 1. 按值传参
        • 2. 引用传参
        • 3. 按输出传参
    • VII. Array数组
      • i. 数组的声明
      • ii. 数组的初始化
      • iii. 数组的赋值
      • iv. 数组的访问
      • v. 数组的遍历
    • VIII. string字符串
      • i. string.Format()
      • ii. string自带的方法
    • IX. struct结构体
      • i. 结构体的定义
      • ii. 定义结构体类型
    • X. enum枚举
      • i. 枚举的定义
      • ii. 定义枚举类型
    • XI. class类
      • i. 类的定义
      • ii. 定义类类型
      • iii. 类的静态成员
      • iv. 构造函数
      • v. 函数重载
    • XII. 继承
      • i. 单一继承

I. 输入输出

Console.ReadLine();
Console.WriteLine();

II. 基本数据类型

C# 基础学习(输入输出、数据类型、控制语句、方法、数组、字符串、结构体、枚举、类)_第1张图片
此图取自菜鸟教程,致敬!

i. 数据类型转换

C# 基础学习(输入输出、数据类型、控制语句、方法、数组、字符串、结构体、枚举、类)_第2张图片
上图取自菜鸟教程,在此致敬!

III. 运算符

C#中算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符的使用方法和C相同。

其他运算符 作用
sizeof() 返回数据类型的大小
typeof 返回class的类型
is 判断对象是否为某一类型。
as 强制转换,即使转换失败也不会抛出异常。

IV. 控制语句

i. C#中if-else if-else、switch、for、do-while、while的使用方法和C语言相同

V. 封装

封装被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。

访问修饰符 访问权限
public 所有对象都可以访问;
private 对象本身在对象内部可以访问;
protected 只有该类对象及其子类对象可以访问
internal 同一个程序集的对象可以访问;
protected internal 访问限于当前程序集或派生自包含类的类型。

VI. 方法

C#中的方法类似于C中函数的功能

i. Main方法

static void Main(string[] args)
{
     
	
}

ii. 方法的定义:

访问修饰符 可选修饰符 返回类型 方法名称(参数列表)
{
return 返回结果;
}

private void Add(int a, int b)
{
     
	return a + b;
}

iii. 方法的调用:

using System;

namespace ConsoleApp1
{
     
    class Program
    {
     
        private void Add(int a, int b)
		{
     
			return a + b;
		}

        static void Main(string[] args)
        {
     
            int a, b;
            a = b = 100;
            Program program = new Program();//创建一个新的类类型
            program.test(a);//使用类名.方法名(参数)方法调用
            Console.WriteLine(a);
        }
    }
}

iv. 参数传递的三种方法

1. 按值传参

按值传参只是将参数的数值传递给了方法,传递的参数在方法中的变化不会对原参数造成影响。

using System;

namespace ConsoleApp1
{
     
    class Program
    {
     
        private void test(int x)
        {
     
            x = 5;
            return;
        }

        static void Main(string[] args)
        {
     
            Program program = new Program();
            int a = 100;
            program.test(a);
            Console.WriteLine(a);
        }
    }
}

输出结果为a = 100;

2. 引用传参

引用传参是将参数的地址传递给方法,原参数会随方法内参数的改变一起改变。

using System;

namespace ConsoleApp1
{
     
    class Program
    {
     
        private void test(ref int x)
        {
     
            x = 5;
            return;
        }

        static void Main(string[] args)
        {
     
            Program program = new Program();
            int a = 100;
            program.test(ref a);
            Console.WriteLine(a);
        }
    }
}

3. 按输出传参

return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。

using System;

namespace ConsoleApp1
{
     
    class Program
    {
     
        private void test(out int x)
        {
     
            int tmp = 5;
            x = tmp;
            return;
        }

        static void Main(string[] args)
        {
     
            Program program = new Program();
            int a = 100;
            program.test(out a);
            Console.WriteLine(a);
        }
    }
}

VII. Array数组

i. 数组的声明

int[] num;

ii. 数组的初始化

int[] num = new num[10];//定义数组大小为10

iii. 数组的赋值

//方法一:下标赋值
int num = new num[10];
num[0] = 0;
//方法二:声明数组时赋值
int[] num = {
     0, 1, 2, 3};

//方法三:初始化时赋值
int num = new num[10]{
     0, 1, 2, 3};//设置数组大小再赋值
int num = new num[]{
     0, 1, 2, 3, 4, 5}//不设置数组大小直接赋值,数组大小等于赋值后的大小

iv. 数组的访问

通过下标索引来访问

int[] num = {
     0, 1, 2, 3};
int x = num[0];

v. 数组的遍历

  1. for循环遍历
for(int i = 0; i < num.Length(); i++)
{
     
	Console.WriteLine(num[i]);
}
  1. foreach循环遍历
foreach(int i in num)
{
     
	Console.WriteLine(i);
}

VIII. string字符串

i. string.Format()

int a, b;
a = b = 1;
string str = string.Format("a={0}\nb={1}", a, b);

//标准数字格式化
//货币格式
string.Format("{0:c}",10);
//固定2位数字
string.Format("{0:d2}",5);
//四舍五入保留1位精度
string.Format("{0:f1}",1.23);
//百分数输出
string.Format("{0:p0}",0.1);
//转义符
string.Format("\"{0}\"","helloworld");

//输出格式化
//可以先字符串格式化再输出,或使用以下方法
Console.WriteLine("a={0}\nb={1}", a, b);

ii. string自带的方法

参考菜鸟教程-C#-C#字符串(string)

IX. struct结构体

i. 结构体的定义

struct node
{
     
	public int a;
	public string str;
};

ii. 定义结构体类型

using System;

namespace ConsoleApp1
{
     
    class Program
    {
     
        struct node
        {
     
            public int a;
            public string str;
        };

        static void Main(string[] args)
        {
     
            node d;
            d.a = 1;
            d.str = "HelloWorld";
        }
    }
}

X. enum枚举

i. 枚举的定义

enum State
{
     
	Walk, Run, Fly
};

ii. 定义枚举类型

using System;

namespace ConsoleApp1
{
     
    class Program
    {
     
        enum State
        {
     
            Walk, Run, Fly
        };
        static void Main(string[] args)
        {
     
            State state;
            state = State.Fly;
        }
    }
}

XI. class类

i. 类的定义

访问修饰符 class 类名
{
成员
}

类的默认访问标识符是 internal,成员的默认访问标识符是 private。

class Test
{
     
	public int data;
	public int getData()
	{
     
		return this.data;
	}
}

ii. 定义类类型

using System;

namespace ConsoleApp1
{
     
    class Test
    {
     
        public int data;
        public int getData()
        {
     
            return this.data;
        }
    }

    class Program
    {
     
        static void Main(string[] args)
        {
     
            Test test = new Test();//创建一个新的类类型
            test.data = 100;//修改类的成员
            Console.WriteLine(test.getData());//调用类的方法
        }
    }
}

iii. 类的静态成员

静态成员的定义使用static关键字,与非静态成员相比,静态成员在定义时就开辟了存储空间,而非静态成员需要临时开辟存储空间,静态成员在任何情况下都会随着调用而受到影响,非静态成员只有在初始化之后调用才会收到影响。

using System;

namespace ConsoleApp1
{
     
    class Test
    {
     
        public int data0;
        public static int data1;
        public void Add()
        {
     
            data1++;
        }
        public int getData0()
        {
     
            return this.data0;
        }
        public int getData1()
        {
     
            return data1;
        }
    }

    class Program
    {
     
        static void Main(string[] args)
        {
     
            Test test0 = new Test();
            Test test1 = new Test();
            test0.data0 = 100;
            test0.Add();
            test1.data0 = 200;
            test1.Add();
            Console.WriteLine(test0.getData0());
            Console.WriteLine(test1.getData0());
            Console.WriteLine(test0.getData1());
            Console.WriteLine(test1.getData1());
        }
    }
}

输出结果为:100、200、2、2

iv. 构造函数

构造函数是类中一个特殊的方法成员,其功能是在定义类类型时自动调用该方法,一般可用于类的初始化。
访问修饰词 所在类类名
{
方法主体
}

using System;

namespace ConsoleApp1
{
     
    class Test
    {
     
        public int data;
        public Test()
        {
     
            this.data = 100;
        }
    }

    class Program
    {
     
        static void Main(string[] args)
        {
     
            Test test = new Test();
            Console.WriteLine(test.data);
        }
    }
}

输出结果为:100

v. 函数重载

函数重载可以让具有相同名称的方法具有不同的定义,通过调用方法时参数列表中参数的类型不同,或者是参数的个数不同来区分名称相同但功能不同的方法。

using System;

namespace ConsoleApp1
{
     
    class Test
    {
     
        public int Add(int a, int b)
        {
     
            return a + b;
        }
        public int Add(int a, int b, int c)
        {
     
            return a + b + c;
        }
    }

    class Program
    {
     
        static void Main(string[] args)
        {
     
            Test test = new Test();
            Console.WriteLine(test.Add(1,2));
            Console.WriteLine(test.Add(1, 2, 3));
        }
    }
}

XII. 继承

i. 单一继承

以一个类为基础创建的一个新的子类,新产生的子类将拥有父类的所有成员,并且可以在此基础上创建新的成员。
class 子类名: 父类名
{
新成员
}

using System;

namespace ConsoleApp1
{
     
    class Test0
    {
     
        public int data0;
        public static int data1;
        public void Add()
        {
     
            data1++;
        }
        public int getData0()
        {
     
            return this.data0;
        }
        public int getData1()
        {
     
            return data1;
        }
    }

    class Test1 : Test0
    {
     
        public int data2;
        public int getData2()
        {
     
            return this.data2;
        }

    }

    class Program
    {
     
        static void Main(string[] args)
        {
     
            Test1 test1 = new Test1();
            test1.data0 = 100;
            test1.data2 = 200;
        }
    }
}

你可能感兴趣的:(C#,c#)