C#<基础知识>学习笔记(5)——【复杂数据类型】

(一)常量

常量是不能改变的,不能重新赋值

//从表面上看是多了一个const
const 变量类型 变量名=;

(二)枚举

枚举可以用来规范开发;
枚举声明在:命名空间与类之间;表示这个命名空间下所有的类都可以使用这个枚举;
枚举就是一个变量类型,只是枚举声明、赋值、使用的方式和普通的变量类型不一样,

//语法
[public] enum 枚举名
{1;2;3;
	......
}
//放在中括号中,代表这个可以省略[public];

public是访问修饰符,代表访问权限;
enum是关键字,声明枚举名的关键字;符合Pascal命名规范;
赋值的时候需要:枚举名.值;

(三)枚举和int与string之间的转换

枚举类型和int之间默认可以转换;但是要强制类型转换,从0开始计数;

public enum QQStatus
    {
        OnLine,
        OffLine = 4,
        Leave,
        Busy,
        QMe
    }
    //这里OnLine的int值为0;后面Leave的值为5;
    //当然int类型也可以强制转换为枚举类型;
    int n = 5;
    QQStatus staus = (QQStatus)n;
    //当枚举里面有这个序号的时候,可以正常转换;当没有的时候,输出原来的int值;

//枚举类型转换为string类型;所有的类型都可以转换为string类型;
//使用.ToString()

//将字符串转换为枚举类型
string s = "0";//不能直接强制转换
//规范的做法如下
QQStatus sta = (QQStatus)Enum.Parse(typeof(QQStatus), s);

  1. 枚举类型和int兼容,可以通过强制类型转换的语法相互转换;当转换一个枚举中没有的值时,不会抛出异常,而是直接将数字显示出来;
  2. 枚举类型可以转换成string类型,可直接调用ToString().
  3. 如果将string类型转换成枚举类型,需要执行:
(需要转换的枚举类型)Enum.Parse(typeof(枚举类型), "字符串")

QQStatus sta = (QQStatus)Enum.Parse(typeof(QQStatus), s);

注意:如果要转换的字符串是数字,即使枚举中没有,也不会抛出异常;如果不是数字,不能转换成功则会抛出异常;

(四)结构

帮助一次性声明多个不同类型的变量

//语法
//直接写在命名空间与类之间
[public] struct 结构名
{
	_成员1;//字段
	_成员2;//字段
	...
}
//结构本质上是自定义变量类型;
public struct Person
{
	public string _name;
	public int _age;
	public char _gender;
}
class Program
{
	static void Main(string[] args)
	{
		Person zsPerson;
		zsPerson.name = "张三";
		zsPerson.age = 21;
		zsPerson.gender = '男';
	}
}

注意:

  1. 变量在程序运行时,只能存储一个值;字段可以存储多个;
  2. 字段在命名的时候,需要在前面加上下划线;
 public enum Gender
    {
        male,
        female
    }

    public struct Person
    {
        public string _name;
        public int _age;
        public Gender _gender;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person zsPerson;
            zsPerson._name = "zhangsan";
            zsPerson._age = 26;
            zsPerson._gender = Gender.male;

        }

    }

(五)数组

一次性存储多个相同类型的变量

//语法
类型[] 数组名 = new 类型[数组长度];

int[] nums = new int[10];
nums[2] = 56;//给下标为2的元素赋值为56

通过下标或者索引来访问元素;
数组访问越界会抛出异常;
数组的长度一旦固定,便不能改变;

  • string类型数组,默认初值是null【没开空间】,但是不是空
  • int类型数组,默认初值是0;
  • bool类型,默认初值是false;
//声明数组的方式,重点是前两种
int[] nums = new int[10];

int[] nums2 = {1, 2, 3, 4, 5};

int[] num3 = new int[] {1, 2, 3};

int[] nums4 = new int[] {1, 2 ,3};

(六)冒泡排序

讲一个数组中的元素按照从大到小或者从小到大的顺序排序;
每次比较相邻两个元素,逆序则交换位置;这样每次都能确定最少一个元素的最终位置

int[] nums = { 1, 2, 5, 89, 3, 101, 45, 23, 100, 89, 78 };
            for (int i = 0; i < nums.Length - 1; i++)
            {
                bool flag = false;
                for (int j = 0; j < nums.Length - 1 - i; j++)
                {
                    if (nums[j] > nums[j + 1])
                    {
                        int temp = nums[j];
                        nums[j] = nums[j + 1];
                        nums[j + 1] = temp;
                        flag = true;
                    }
                }
                if (flag == false)
                    break;

            }
            for (int i = 0; i < nums.Length; i++)
            {
                Console.WriteLine(nums[i]);
            }

(七)方法/函数

方法即是函数,是一种代码复用的机制;

//函数或方法的语法
[public] static 返回值类型 方法名/函数名 ([参数列表])
{
	函数体;
}
//public是访问修饰符,公开的;
//static:静态的
//返回值类型:int, double, void
//命名符合Pascal规则
//参数列表:提供给这个方法或者参数
return作用:
  1. 在方法中返回要返回的值;
  2. 立即结束本次方法;
注意:
  • 调用函数的时候要使用:类名.方法名()
  • 有时候可以省略类名:如果所写的方法和Main函数同在一个类中,可以省略;当不在同一个类的时候,不能省略类名;
发布了34 篇原创文章 · 获赞 0 · 访问量 1002

猜你喜欢

转载自blog.csdn.net/forever_008/article/details/104034453