百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

C#学习笔记8(新人必看!) c#基础教程

bigegpt 2024-10-12 05:24 8 浏览

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关键字可以隐藏从父类继承过来的同名对象

相关推荐

最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)

前言作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上...

Redis数据库从入门到精通(redis数据库设计)

目录一、常见的非关系型数据库NOSQL分类二、了解Redis三、Redis的单节点安装教程四、Redis的常用命令1、Help帮助命令2、SET命令3、过期命令4、查找键命令5、操作键命令6、GET命...

netcore 急速接入第三方登录,不看后悔

新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:https://oauthlogin.net/前言此次带来得这个小项目是...

精选 30 个 C++ 面试题(含解析)(c++面试题和答案汇总)

大家好,我是柠檬哥,专注编程知识分享。欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:发送1024打包下载10个G编程资源学习资料发送001获取阿里大神LeetCode...

Oracle 12c系列(一)|多租户容器数据库

作者杨禹航出品沃趣技术Oracle12.1发布至今已有多年,但国内Oracle12C的用户并不多,随着12.2在去年的发布,选择安装Oracle12c的客户量明显增加,在接下来的几年中,Or...

flutter系列之:UI layout简介(flutter-ui-nice)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。在flutter中,基本上所有的对象都是wi...

Flutter 分页功能表格控件(flutter 列表)

老孟导读:前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析来来。PaginatedDataTablePaginatedDataTable是一个带分页功能的DataTable,...

Flutter | 使用BottomNavigationBar快速构建底部导航

平时我们在使用app时经常会看到底部导航栏,而在flutter中它的实现也较为简单.需要用到的组件:BottomNavigationBar导航栏的主体BottomNavigationBarI...

Android中的数据库和本地存储在Flutter中是怎样实现的

如何使用SharedPreferences?在Android中,你可以使用SharedPreferencesAPI来存储少量的键值对。在Flutter中,使用Shared_Pref...

Flet,一个Flutter应用的实用Python库!

▼Flet:用Python轻松构建跨平台应用!在纷繁复杂的Python框架中,Flet宛如一缕清风,为开发者带来极致的跨平台应用开发体验。它用最简单的Python代码,帮你实现移动端、桌面端...

flutter系列之:做一个图像滤镜(flutter photo)

简介很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。那么如果在flutter中,如果要实现这样的滤镜功能应该怎么处理呢?一起...

flutter软件开发笔记20-flutter web开发

flutterweb开发优势比较多,采用统一的语言,就能开发不同类型的软件,在web开发中,特别是后台式软件中,相比传统的html5开发,更高效,有点像c++编程的方式,把web设计出来了。一...

Flutter实战-请求封装(五)之设置抓包Proxy

用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来...

为什么不在 Flutter 中使用全局变量来管理状态

我相信没有人用全局变量来管理Flutter应用程序的状态。毫无疑问,我们的Flutter应用程序需要状态管理包或Flutter的基本小部件(例如InheritedWidget或St...

Flutter 攻略(Dart基本数据类型,变量 整理 2)

代码运行从main方法开始voidmain(){print("hellodart");}变量与常量var声明变量未初始化变量为nullvarc;//未初始化print(c)...