【笔记4】

本文详细介绍了C#中的访问修饰符、方法定义与调用、不同类型的数组(包括不可变、多维和交错)以及相关概念如空类型和双问号运算符。此外,还涵盖了字符串操作和数组操作的基础知识。
摘要由CSDN通过智能技术生成

一、访问修饰符

作用

所有类型和类型成员都具有可访问性级别

分类

public:同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员。

internal : 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。

private : 同一类和结构的代码可以访问该类型和成员。 

protected : 同一类和派生(继承特性)类中的代码可以访问该类型和成员。

protected internal :  同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。

private protected:该类型或成员可以通过从 class 派生的类型访问。

C#的默认修饰符

类和结构体的默认修饰符是internal

类中所有的成员默认修饰符是private

接口默认修饰符是internal。

接口的成员默认修饰符是public。

枚举类型成员默认修饰符是public。

委托的默认修饰符是internal。

二、C# 方法(函数)

方法:方法是包含一系列语句的代码块。方法必须在类或结构中声明

优点:减少代码重复率,方法体现了c#语言的封装性

方法的分为 声明方法(定义方法) 和调用方法(使用方法)

基本结构:

访问权限    返回值类型    命名(大驼峰) 参数  大括号   语句块

调用方法:

在哪调用(在方法内部调用    Main 入口方法  程序运行时 自动执行   Main方法是静态方法   自定义静态方法直接使用, 自定义非静态方法 需要对象打点调用)

方法的分类:

从访问权限分类

从静态和非静态分类

从有无参数

从有无返回值分类

输出参数

1. 是对于方法返回值类型的补充。return 语句可用于函数中返回一个值  输出参数可以返回多个值

2.关键字 out    out输出参数在方法中 必须被使用,且和retrun保持一致

3. 其他方面与引用参数相似

不可变数组

含义:不可变数组是用来储存同一类型元素的固定大小的顺序集合

数组属于引用类型

数组只能包含相同类型的元素

数组通过下标(索引值)标记元素  从零开始

格式:

声明数组:

datatype[] arrayName;

  • datatype 用于指定被存储在数组中的元素的类型。
  • 指定数组的秩(维度)。秩指定数组的大小。
  • arrayName 指定数组的名称

初始化数组中的元素的方式

数据类型[] 数组名 = new 数据类型[长度];
数据类型[] 数组名 = {值 1, 值 2, …}
数据类型[] 数组名 = new 数据类型[长度]{值 1,值 2,…}

数据类型[] 数组名 = new 数据类型[长度可忽略]{值 1,值 2,…}

数组访问元素:

intArray[0];

修改数组元素:

 intArray[0] = 1;

遍历数组方式:

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

            for (int i = 0; i < intArray2.Length; i++)
            {
                Console.WriteLine(intArray2[i]);
            }
            foreach (var item in intArray2)
            {
                Console.WriteLine(item);
            }

多维数组

含义:数组嵌套数组形式   一般常用二维数组

二位数组格式:string [,] strArray =new string[数组个数,数组元素个数]

二维数组访问元素:

  int val = a[2,3];

二维数组修改元素:

a[2,3]=10;

初始化二维数组

//int[,] intArray1 = new int[2, 2] { { 1, 2 }, { 3, 4 } };

交错数组 了解

含义

交错数组是数组的数组,交错数组是一维数组。

交错数组格式:
int [][] scores;
初始化交错数组中的元素的方式

    int[][] scores = new int[2][]{new int[]{92,93,94},new int[]{85,66,87,88}};

交错数组访问元素:
scores[0][1]

交错修改数组元素:
scores[0][1]  =10;

例子:在控制台中录入学生姓名 年龄 分数 性别

要求:成绩范围0–100  年龄要求18-20   性别要求 0对应女和 1 对应男
“请输入学生总数:

 添加学生姓名

展示所有学生信息

提示退出程序 或者是修改学生信息(Y/X)

提示修改第几个学生信息(一种有几个学生)?请输入对应的编号(1,2,3,4)

修改学生姓名

。。。。。

展示所有学生信息

提示退出程序 或者是修改学生信息(Y/X)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace zuoye1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入学生人数");
            int xszs = Convert.ToInt32(Console.ReadLine());

            string[] XsXm = new string[xszs];
            int[]XsNl = new int[xszs];
            int[]XsXb = new int[xszs];
            float[] XsCj = new float[xszs];
            for (int i = 0; i < xszs; i++)
            {
                Console.WriteLine("请输入第"+(i+1)+"学生姓名");
                string xsxm = Convert.ToString(Console.ReadLine());
                XsXm[i] = xsxm;
                Nl:
                Console.WriteLine("请输入第" + (i + 1) + "学生年龄");
                int xsnl= Convert.ToInt32(Console.ReadLine());
                if (xsnl < 18 || xsnl > 20)
                {
                    Console.WriteLine("年龄范围错误");

                    goto Nl;
                }
                XsNl[i] = xsnl;


                Xb:
                Console.WriteLine("请输入第" + (i + 1) + "学生性别(女-0/男-1)");
                int xsxb = Convert.ToInt32(Console.ReadLine());
                if (xsxb <0 || xsxb>1)
                {
                    Console.WriteLine("不符合要求请重新输入");

                    goto Xb;
                }
                XsXb[i]= xsxb;

                Cj:
                Console.WriteLine("请输入第" + (i + 1) + "学生成绩");
                float xscj= Convert.ToSingle(Console.ReadLine());
                if(xscj<0 || xscj > 100)
                {
                    Console.WriteLine("不符合要求请重新输入");
                    goto Cj;
                }
                XsCj[i]= xscj;

                


            }
            for (int j = 0; j < XsXm.Length; j++)
            {

                Console.WriteLine("第" + (j + 1) + "个学生的姓名是:" + XsXm[j]);
                Console.WriteLine("第" + (j + 1) + "个学生的年龄是:" + XsNl[j]);
                Console.WriteLine("第" + (j + 1) + "个学生的性别是:" + XsXb[j]);
                Console.WriteLine("第" + (j + 1) + "个学生的成绩是:" + XsCj[j]);
            }
            panduanweizhi:
            bool panduan = true;
            while (panduan)
            {
                shuru:
                Console.WriteLine("是否退出系统(Y/N)");
                string TuiChu=Convert.ToString(Console.ReadLine());
                if (TuiChu=="Y"|| TuiChu == "y")
                {
                    break;
                }
                else if (TuiChu=="N"|| TuiChu == "n") 
                {
                    xiugaidijige:
                    Console.WriteLine("请问需要修改第几个学生");
                    int XiuGai=Convert.ToInt32(Console.ReadLine());
                    if (XiuGai!=xszs)
                    {
                        Console.WriteLine("没有第"+XiuGai+"个人,请重新输入");
                        goto xiugaidijige;
                    }

                    Console.WriteLine("请输入第" + XiuGai + "学生姓名");
                    XsXm[XiuGai-1]=Convert.ToString(Console.ReadLine());

                    nlXg:
                    Console.WriteLine("请输入第" + XiuGai + "学生年龄");
                    XsNl[XiuGai-1] = Convert.ToInt32(Console.ReadLine());

                    if (XsNl[XiuGai - 1] < 18 || XsNl[XiuGai-1] > 20)
                    {
                        Console.WriteLine("年龄范围错误");

                        goto nlXg;
                    }


                    xbXg:
                    Console.WriteLine("请输入第" + XiuGai + "学生性别");
                    XsXb[XiuGai - 1] = Convert.ToInt32(Console.ReadLine());
                    if (XsXb[XiuGai-1] < 0 || XsXb[XiuGai - 1] > 1)
                    {
                        Console.WriteLine("不符合要求请重新输入");

                        goto xbXg;
                    }


                    cjXg:
                    Console.WriteLine("请输入第" + XiuGai + "学生成绩");
                    XsCj[XiuGai-1] = Convert.ToSingle(Console.ReadLine());

                    if (XsCj[XiuGai - 1] < 0 || XsCj[XiuGai-1] > 100)
                    {
                        Console.WriteLine("不符合要求请重新输入");
                        goto cjXg;
                    }

                }
                else
                {
                    Console.WriteLine("请输入(Y/N)");
                    goto shuru;
                }

                goto panduanweizhi;

            }



            Console.ReadKey();
        }

    }
}

Array 类
含义:
是 C# 中所有数组的基类,它是在 System 命名空间中定义  提供了各种用于数组功能的属性和方法

常用属性 和方法

CreateInstance(typeof(int), 5);  //创建一维数组

  Array aa=     Array.CreateInstance(typeof(int), 5);
  aa.SetValue(0, 1);
  aa.GetValue(0);

   Array asa  =Array.CreateInstance(typeof(int), 2,2);//创建二维数组
    asa.SetValue(0, 1);

    asa.SetValue(0, 2)

     asa.SetValue(1, 2);

     asa.GetValue(1, 1);

Indexof(Array array, Obejct)    数组中第一次出现的元素下标
Sort(Array array)    从小到大排序 (仅支持一维数组)
Reverse(Array array)    数组逆置
Clear(Array array, int index, int length)    将某个范围内的所有元素设为初始值
Copy      深复制   数组内容到另一个数组

可变参数params (讲完数组再说)

1.params是ParamArrayAttribute(参数数组属性)的缩写
2.param解决了C#中不定参数的传递的问题

3.params参数必须定义在参数列表最后面。
4.params必须是一维数组
5.params只能在一个方法中 定义一个一维数组

递归方法调用

一个方法可以自我调用。这就是所谓的 递归

C# 空类型(Null)

1.Null

特点:

1.表示不引用任何对象的空引用,没有创建内存空间,存放的是空引用指针;

2.Null类型是System.Nullable<T>这个struct的类型

3.对于值类型 赋值不能直接为null    引用类型可以

4.null引用类型变量的默认值

值类型如何赋值为null?

1.Nullable<T>结构体

Nullable<int> intNumber = null;

2.类型之后添加 单 ?

int? intNumber = null;

使用场景:

当我们想要对于一个值类型变量进行 判断 是否 存在时,为了节约内存 可以赋值为null

null和字符串空值和字符串空格的区别
1.null是没有创建内存空间,

2.字符串空值  为"" 或者string.Empty  实际上都会分配空间;

3.字符串空格 "    "  会分配空间 空格也是ACSII  对应的符号

双问号 ??(合并运算符)

作用:

用于判断一个变量在为 null 的时候返回一个指定的值

使用场景

Null 合并运算符为类型转换定义了一个预设值,以防可空类型的值为 Null

不可变字符串
含义:

string,引用类型,string类型表示零或更多 Unicode 字符组成的序列,

string 是 .NET Framework 中 String 的别名。

初始化字符串方式
            //方式1 字面量创建字符串
            string str1 = "abc";
            string str2  = @"abc";
            //方式2
            char[] charArray = new char[5] { 'a','b','c','d','f'};
            string str3 = new string(charArray);
            //方式3
             string str4   = string.Format("123");

            //字符串本质也是单字符的集合
            string str5 = "abcdefg";
            Console.WriteLine(str5.Length);

            char charNumber1 =  str5[0];
            Console.WriteLine(charNumber1);
            //str5[0] = 'w';  无法直接修改某个单字符
            for (int i = 0; i < str5.Length; i++)
            {
                Console.WriteLine(str5[i]);
            }
            foreach (var item in str5)
            {
                Console.WriteLine(item);
            }

字符串常用API

    1.Length 获取字符串的长度,即字符串中字符的个数.
    2.IndexOf 返回整数,得到指定的字符串在原字符串中第一次出现的位置.
    3.LastlndexOf 返回整数,得到指定的字符串在原字符串中最后一次出现的位置.

    4. StartsWith 返回布尔型的值,判断某个字符串是否以指定的字符串开头.
       
    5. EndsWith 返回布尔型的值,判断某个字符串是否以指定的字符串结尾.
       
    6. ToLower 返回一个新的字符串,将字符串中的大写字母转换成小写字母.
       
    7. ToUpper 返回一个新的字符串,将字符串中的小写字母转换成大写字母.
       
    8. Trim返回一个新的字符串,不带任何参数时表示将原字符串中前后的空格删除.
       
    9. Remove 返回一个新的字符串,将字符串中指定位置的字符串移除.
    10. TrimStart 返回一个新的字符串,将字符串中左侧的空格删除.
       
    11. TrimEnd 返回一个新的字符串,将字符串中右侧的空格删除。
       
    12. PadLeft 返回一个新的字符串,从字符串的左侧填充空格达到指定的字符串长度.
       
    13. PadRight 返回一个新的字符串,从字符串的右侧填充空格达到指定的字符串长度.
       
    14. Substring 返回一个新的字符串,用于截取指定的字符串.
       
    15. Insert 返回一个新的字符串,将一个字符串插入到另一个字符串中指定索引的位置.
        

     16.concat 

   17.contain  字符串是否包含某个字符串  (区分大小写)

   18.IsNullOrEmpty  判断字符串对象是否为空类型或者是空字符串

   19. char[] charArray = str.ToCharArray();    //ToCharArray  把字符串分割成字符数组

  20.str1.Split(',')

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值