c#基础3

1.访问修饰符
作用

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

分类
public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员。
internal : 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。
private : 同一类和结构的代码可以访问该类型和成员。
protected : 同一类和派生(继承特性)类中的代码可以访问该类型和成员。
protected internal :  同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。
private protected:该类型或成员可以通过从 class 派生的类型访问

C#的默认修饰符
    类、结构体的默认修饰符是internal。
    类中所有的成员默认修饰符是private。
    接口默认修饰符是internal。
    接口的成员默认修饰符是public。
    枚举类型成员默认修饰符是public。
    委托的默认修饰符是internal。

  2.C# 方法(函数)

作用:

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

优点:

减少代码重复率

方法体现了c#语言的封装性

方法的分为 声明方法 和调用方法
声明方法基本结构:

       

访问权限  返回值类型   代表方法 是否具有 return 数据的类型

       void  和 其他明确的数据类型 (int  float 。。 string。。。)
    方法名称     大驼峰   见名之意
    方法参数    实参(调用方法) 和形参(声明方法)
    括号{     

     语句块

    }

调用方法:

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

方法的分类:

   从访问权限分类
  从有无参数和有无返回值分类
  从静态和非静态分类

 参数传递 形式:

  值参数

   特点:

  1.参数传递的默认方式 

  2.当调用一个方法时,会为每个值参数创建一个新的存储位置。

  3.当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全

 总结:无论参数的类型是值类型还是引用类型  都遵循值传递的特性

  引用参数 

   特点:

   1.引用参数是一个对变量的内存位置的引用 不会创建一个新的存储位置

   2. 参数关键字 ref

 int a = 10;
            int b = 20;
            Program  program = new Program();
            program.swap( ref a,ref b);
            Console.WriteLine("调用方法后a的值{0}",a);
            Console.WriteLine("调用方法后b的值{0}",b);
 
 
            string stra = "123";
            string strb = "456";
            program.swapString(ref stra,ref strb);
            Console.WriteLine("调用方法后 stra的值{0}", stra);
            Console.WriteLine("调用方法后strb的值{0}", strb);
 
            int[] intArray1 = new int[] { 1, 2 };
            int[] intArray2 = new int[] { 3, 4 };
 
            program.swapIntArray(ref intArray1,ref intArray2);
            foreach (int i in intArray1)
            {
                Console.WriteLine(i);
            }
 
            foreach (int i in intArray2)
            {
                Console.WriteLine(i);
            }
 
            People people = new People() { Id = 1000 };
            People people1 = new People() { Id = 2000 };
            program.swapPeople(ref people, ref people1);
            Console.WriteLine(people.Id);
            Console.WriteLine(people1.Id);

输出参数

  特点:

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

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

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

 public static int AddMothod(int a,int b,out string x) { 
        
            x = a.ToString()+b.ToString();
            int v = a + b;
            return v;
        
        }   

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

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

static void ParamtesDemo(string className, params string[] names)
        {
               string tempStr = "";
              foreach (string name in names)
               {
                    tempStr += name;  
               }
                Console.WriteLine($"{className}的学生有:{tempStr}");
         }
ParamtesDemo("223班级", "张三", "李四", "王五", "赵六");

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  对应的符号

            string str = "123"; //正常字符串,有值非空
            string str1 = null;  //值为null
            string str2 = "";    //是个空字符串
            string str3 = "    ";//空白字符串,双引号之间是空格或者Tab键
            Console.WriteLine(string.IsInterned(str));
            Console.WriteLine(string.IsInterned(str1));
            Console.WriteLine(string.IsInterned(str2));
            Console.WriteLine(string.IsInterned(str3));
 
 
             IsInterned方法 判断数据是否已经存在于内存中

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

作用:

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

使用场景

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

         double? num1 = null;
         double? num2 = 3.14157;
         double num3;
         num3 = num1 ?? 5.34;      // num1 如果为空值则返回 5.34
         Console.WriteLine("num3 的值: {0}", num3);
         num3 = num2 ?? 5.34;
         Console.WriteLine("num3 的值: {0}", num3);

不可变数组

含义:

不可变数组是一个存储相同类型元素的固定大小的顺序集合

特点:

数组属于引用类型

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

数组通过下标(索引值)标记元素

格式:

声明数组:

datatype[] arrayName;

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

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

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

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

数组访问元素:
intArray[0];

修改数组元素:
 intArray[0] = 1;

遍历数组方式:

for

foreach

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

数组越界   超出数组范围  系统抛出异常

System.IndexOutOfRangeException:“索引超出了数组界限

例子:在控制台中录入学生成绩

要求:成绩范围0–100
“请输入学生总数:”
“请输入学生成绩:”
"输入的成绩有误 : "

多维数组

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

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

初始化二维数组

 /* 一个带有 5 行 2 列的数组 */
            int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };

二维数组访问元素:

  int val = a[2,3];

二维数组修改元素:

a[2,3]=10;

遍历二维数组元素

     for (int i = 0; i < studentArray.GetLength(0); i++) {
 
                for (int j = 0; j < studentArray.GetLength(1);j++) {
 
                    Console.WriteLine(studentArray[i, j]);
                }
                
            }

其他多维数组格式: 例如三维数组 string [,,] strArray =new string[数组个数,数组元素个数]

int[,,] val = new int[3, 3, 3]    { { { 10, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } },

                          { { 10, 11, 12 }, { 13, 14, 15 }, { 16, 17, 18 } },

{ { 19, 20, 21 }, {22, 23, 24 }, { 25, 26, 27 } } };

三维数组访问元素:

  int val = a[2,2,2];

三维数组修改元素:

a[2,2,2]=10;

遍历三维数组元素

  int[,,] tempArray = new int[2, 2, 2] { { {1,2 },{3,4 } },{ {5,6 },{7,8 } } };
 
            for (int i = 0; i < tempArray.GetLength(0); i++)
            {
 
                for (int j = 0; j < tempArray.GetLength(1); j++)
                {
 
                    for (int k = 0; k < tempArray.GetLength(2); k++) {
                        Console.WriteLine(tempArray[i,j,k]);
 
                    }
                 
                }
 
            }

交错数组 了解

含义

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

交错数组格式:
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)

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      深复制   数组内容到另一个数组

//作业:1.写 四和5维数组  并且遍历   2.学生信息表 3.实现 sort  reverse  indexof 原理

不可变字符串
含义:

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

  20.str1.Split(',')

StringBuilder类的使用                 

特点:

1.可以定义可变字符串,实现字符串的添加

2.对于高频率字符串拼接可以使用

3.如果普通拼接 可以使用上节课所以将的字符串格式化方式

常用方法如下:

Append  末尾追加

Insert 在指定位置插入指定字符串

Remover 移除指定字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值