优秀的编程知识分享平台

网站首页 > 技术文章 正文

C#学习笔记8(新人必看!)(c#入门实例)

nanyue 2024-09-15 23:29:38 技术文章 3 ℃

C#是当前在.Net开发环境下一种十分易于使用的语言,这门语言上手容易,语法简单,那么接下来就展示一些学习这门语言中的笔记吧!本合集将要要学习的内容提炼为11天,本篇是第八天的内容,11天成为C#程序员,就是这么简单!

8 .Net学习第八天

8.1 命名空间

想要在其他命名空间下使用当前命名空间下的类时,可以在其他命名空间前引用该命名空间

在其他项目中应用当前命名空间下的类时,可以在项目中“添加引用-引用命名空间”

Alt + Shift + F10快速引用命名空间

8.2 值类型和引用类型

值类型和引用类型的区别:

  • 值类型和引用类型在内存上存储的地方不一样
  • 在传递值类型和传递引用类型的时候,传递的方式不一样
  • 值类型存储在内存的栈当中,引用类型存储在内存的堆中

引用类型将要存的数据存储在堆当中,将在堆中存储数据的地址存储在栈中,并将栈中用于存储地址的空间命名为引用类型的名

8.3 字符串

字符串的不可变性:当我们对字符串进行重新赋值时,字符串重新在堆中开辟一个空间用于存储新值,并将栈中存储的地址指向新的空间

如果不对旧值信息处理,在程序结束后GC会扫描内存,将堆中所有未被指向的值销毁

当对两个字符串赋予同样的值时,会在栈中开辟两块不同的空间存储地址,指向堆中的同一空间

字符串可以被看做时char类型的一个只读数组,即我们可以对string类型通过下标访问字符串中某一位置的值,但是不能通过下标修改字符串中指定位置的值

char[] c = s.ToCharArrar(); //string转为char数组
new string(char[] c); //char数组转为string

StringBuilder需要对字符串进行大量操作时,调用StringBuilder可以节省大量开辟空间的时间,最后通过ToString()转换为字符串

字符串提供了很多方法,用于简化对字符串的操作


方法

方法作用

Length

可以得到字符串的长度

ToUpper

将字符串转换成大写

ToLower

将字符串转换为小写

Equals

比较两个字符串,可以忽略大小写

Split

可以从字符串中删除指定的字符

Contains

判断字符串中是否含有指定的子字符串

Replace

将字符串中有子字符串1的地方替换成子字符串2

SubString

截取从指定索引开始后指定长度的字符串

StartsWith

判断字符串是否以子字符串开始

EndsWith

判断字符串是否以子字符串结束

IndexOf

取子字符串第一次出现的位置

LastIndexOf

取子字符串最后一次出现的位置

Trim

将字符串前后的空白字符移除

TrimStart

将字符串前面的空白字符移除

TrimEnd

将字符串后面的空白字符移除

IsNullOrEmpty

判断字符串是空还是null

Join

串联对象数组的各个元素,在每个元素间使用指定分隔符

8.4 封装

封装是面向对象的重要特点之一

封装在方法的过程中体现,在面向对象的过程中,只需要对外界提供一个操纵的方法,而不需要提供这个方法的实现方法

8.5 继承

继承是面向对象的重要特点之一

在C#中,类时可以被继承的

关于继承的作用,以下举个例子:

首先新建一个学生类,为其写好字段属性方法

字段包括_name、_age、_gender

属性包括Name、Age、Gender

方法包括Study()

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

namespace Test2
{
  public class Student
  {
    private string _name;
    private int _age;
    private char _gender;
    public string Name
    {
      get{return _name;}
      set{_name = value;}
    }
    public int Age
    {
      get{return _age;}
      set{_age = value;}
    }
    public char Gender
    {
      get{return _gender;}
      set{_gender = value;}
    }
    public void study()
    {
      Console.WriteLine("我在学习");
    }
  }
}

然后新建一个教师类,为其写好字段属性方法

字段包括_name、_age、_gender

属性包括Name、Age、Gender

方法包括Teach()

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

namespace Test2
{
  public class Teacher
  {
    private string _name;
    private int _age;
    private char _gender;
    public string Name
    {
      get{return _name;}
      set{_name = value;}
    }
    public int Age
    {
      get{return _age;}
      set{_age = value;}
    }
    public char Gender
    {
      get{return _gender;}
      set{_gender = value;}
    }
    public void Teach()
    {
      Console.WriteLine("我在教书");
    }
  }
}

可以看到,由于这两个类都是对人描述的一个类,所以其都有其名字、年龄、性别这三个字段与其对应属性,不同的在于方法上,学生类需要学习的方法,教师类需要教书的方法,那么在实际过程中,就会造成代码的冗余,再多添加类的话,会有更多的冗余代码,那么我们就需要构建一个类,能够包括这三个字段和对应的属性,再提供属性能够让这些类调用

那么我们可以新建一个Person类

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

namespace Test2
{
  public class Person
  {
    private string _name;
    private int _age;
    private char _gender;
    public string Name
    {
      get{return _name;}
      set{_name = value;}
    }
    public int Age
    {
      get{return _age;}
      set{_age = value;}
    }
    public char Gender
    {
      get{return _gender;}
      set{_gender = value;}
    }
  }
}

于是,学生类和教师类的代码可以做如下更改

学生类:

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

namespace Test2
{
  class Student:Person
  {
    public void Study()
    {
      Console.WriteLine("我在学习");
    }
  }
}

教师类:

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

namespace Test2
{
  public class Teacher:Person
  {
    public void Teach()
    {
      Console.WriteLine("我在教书");
    }
  }
}

即,可以将多个类中都出现的重复成员,单独封装到一个类中,作为这些类的父类(基类)

这些类被称为这个父类(基类)的子类(派生类)

子类继承的是父类中的属性和方法,没有继承父类的私有字段

在上述的例子中Person是父类,Student和Teacher是子类

在子类new一个对象时,会默认调用父类的无参构造函数

在子类中用base():关键字显示的调用父类中的有参数构造函数

new关键字可以隐藏从父类继承过来的同名对象

最近发表
标签列表