威尼斯人线上娱乐

NET面试题解析,基础笔记

5 4月 , 2019  

程序员开发平常涉及到的内部存款和储蓄器区域:堆、栈、静态存款和储蓄区域。

  类别文章目录地址:

壹.值档次与引用类型的区分:

1.字段、属性、方法、构造函数
字段:存储数据
质量:珍贵字段,对字段的取值和设值实行限制
主意:描述对象的行事
构造函数:开始化对象(给指标的各个属性依次的赋值)
类中成员,要是不加访问修饰符,暗中同意都以private
给每一个民用的字段都计划1个国有的质量
个性的实质正是四个艺术

值类型和引用类型的差异:

.NET面试题解析(00)-开篇来谈谈面试 &
体系小说索引

CL奥迪Q5辅助八只品种:引用类型值类型。那是.NET语言的根基和首要,他们从类型定义、实例创设、参数字传送递,到内部存款和储蓄器分配都有所分歧。

当大家创立好对象后
给这么些指标的属性赋值用set
打字与印刷那一个天性的值的时候实施get

  1. 值类型和引用类型在内部存款和储蓄器上囤积的地点分化。值类型的值是储存在内部存款和储蓄器的栈在那之中。引用类型的值是储存在内存的堆中。
  2. 在传递值类型和传递引用类型的时候,传递格局区别。值类型大家称之为值传递,引用类型大家誉为引用传递。

  常会见试标题:

  1. 值类型和引用类型的差距?

  2. 结构和类的界别?

  3. delegate是引用类型大概值类型?enum、int[]和string呢?

  4. 堆和栈的界别?

  5. 何以状态下会在堆(栈)上分红数据?它们有性能上的分别吧?

陆.“结构”对象或然分配在堆上吗?什么状态下会生出,有哪些要求专注的啊?

  1. 明白参数按值传递?以及按引用传递?

  2. outref 的界别与相同点?

  3. C#NET面试题解析,基础笔记。支撑哪多少个预约义的值类型?C#支撑什么预约义的引用类型?

  4. 有二种办法可以看清值类型和引用类型?

  5. 说说值类型和引用类型的生命周期?

1贰.
假设结构体中定义引用类型,对象在内部存款和储蓄器中是怎么着存款和储蓄的?例如上边结构体中的class类
User对象是储存在栈上,依旧堆上?

public struct MyStruct 
{ 
    public int Index; 
    public User User; 

威尼斯人线上娱乐 1

this:当前类的目的
this:调用当前类
this是把品质和一部分变量区分开来的。
构造函数:一、未有回去值 连void也未有
贰、构造函数的名称跟类名相同

本章节,一时半刻只介绍第2个区别:值类型和引用类型在内部存款和储蓄器上的贮存区域。

  认识值类型与引用类型

高居不下,只要搞清楚值类型和引用类型的规律,下面装非凡就都消除了。

下图清晰了展示了.NET中项目分类,值类型主倘若有的简短的、基础的数据类型,引用类型首要用于更增加的、复杂的、复合的数据类型。

构造函数能够重载
:this(name,0,0,gender)

 

威尼斯人线上娱乐 2 基本概念

CL陆风X8帮忙五只品种:引用类型值类型。那是.NET语言的根底和重点,他们从类型定义、实例创设、参数字传送递,到内部存储器分配都有所差异。固然看起来大约,但真正清楚其内涵的人却就像是并不多。

威尼斯人线上娱乐 3

图片引用

下图清晰了展现了.NET中项目分类,值类型首倘诺壹些简易的、基础的数据类型,引用类型首要用于更增加的、复杂的、复合的数据类型。

威尼斯人线上娱乐 4

威尼斯人线上娱乐 5

new:一、在内部存款和储蓄器中开辟一块空间
贰、在开拓的空中创设对象
三、调用对象的构造函数

常用值类型:int、double、bool、char、decimal、struct、enum

威尼斯人线上娱乐 6 内部存款和储蓄器结构

值类型和引用类型最根源的分别正是其内存分配的反差,在那前边率先要知道CL昂科威的内部存储器中多个基本点的定义:

Stack 栈:线程栈,由操作系统一管理理,存放值类型、引用类型变量(正是引用对象在托管堆上的地方)。栈是基于线程的,也正是说二个线程会含有二个线程栈,线程栈中的值类型在指标功效域结束后会被清理,效用很高。

GC
Heap托管堆
:进程起初化后在经过地址空间上划分的内部存款和储蓄器空间,存款和储蓄.NET运营进程中的对象,负有的引用类型都分配在托管堆上,托管堆上分配的对象是由GC来保管和假释的。托管堆是依照进度的,当然托管堆内部还有其它越发复杂的布局,有趣味的能够深深精通。

结合下图驾驭,变量a及其值3都以储存在栈上边。变量b在栈上存款和储蓄,其值指向字符串“1二3”的托管堆对象地址(字符串是引用类型,字符串对象是储存在托管堆上边。字符串是二个特出的引用类型,前边小说会尤其探讨)”

威尼斯人线上娱乐 7

值类型一直都存款和储蓄在栈上面吗?全部的引用类型都存款和储蓄在托管堆上边吧?

一.独门的值类型变量,如部分值类型变量都以储存在栈上边包车型地铁;

二.当班值日类型是自定义class的一个字段、属性时,它随引用类型存款和储蓄在托管堆上,此时他是援引类型的壹部分;

四.装有的引用类型肯定都以存放在托管堆上的。

5.还有壹种情况,同地点标题1贰,结构体(值类型)中定义引用类型字段,结构体是储存在栈上,其引用变量字段只存储内存地址,指向堆中的引用实例。

值类型和引用类型最根源的界别正是其内存分配的距离,在那在此之前率先要驾驭CL昂Cora的内部存储器中四个首要的概念:

界定:set get 构造函数

常用引用类型:string、自定义类、数组

威尼斯人线上娱乐 8 对象的传递

将值类型的变量赋值给另一个变量(或许作为参数字传送递),会执行三回值复制。将引用类型的变量赋值给另3个引用类型的变量,它复制的值是引用对象的内部存款和储蓄器地址,由此赋值后就会多个变量指向同多个引用对象实例。精晓这点尤其重大,上面代码测试证雀巢(Nestle)下:

int v1 = 0;
            int v2 = v1;
            v2 = 100;
            Console.WriteLine("v1=" + v1); //输出:v1=0
            Console.WriteLine("v2=" + v2); //输出:v2=100

            User u1=new User();
            u1.Age = 0;
            User u2 = u1;
            u2.Age = 100;
            Console.WriteLine("u1.Age=" + u1.Age); //输出:u1.Age=100
            Console.WriteLine("u2.Age=" + u2.Age); //输出:u2.Age=100,因为u1/u2指向同一个对象

当把指标作为参数传递的时候,效果同地点一样,他们都称之为按值传递,但因为值类型和引用类型的差别,导致其发出的功用也分歧。

Stack
:线程栈,由操作系统一管理理,存放值类型、引用类型变量(便是引用对象在托管堆上的地点)。栈是基于线程的,也等于说二个线程会包含三个线程栈,线程栈中的值类型在目的功效域结束后会被清理,功效很高。

静态方法 类名.方法名
实例方法 对象名.方法名


参数-按值传递:

private void DoTest(int a)
        {
            a *= 2;
        }

        private void DoUserTest(User user)
        {
            user.Age *= 2;
        }

        [NUnit.Framework.Test]
        public void DoParaTest()
        {
            int a = 10;
            DoTest(a);
            Console.WriteLine("a=" + a); //输出:a=10
            User user = new User();
            user.Age = 10;
            DoUserTest(user);
            Console.WriteLine("user.Age=" + user.Age); //输出:user.Age=20
        }

地方的代码示例,三个措施的参数,都以按值传递

  • 对此值类型(int a)
    :传递的是变量a的值拷贝副本,由此原本的a值并从未更改。
  • 对此引用类型(User user)
    :传递的是变量user的引用地址(User对象实例的内部存款和储蓄器地址)拷贝副本,由此他们操作都以同3个User对象实例。

GC
Heap托管堆
:进度开头化后在经过地址空间上划分的内部存款和储蓄器空间,存款和储蓄.NET运转进度中的对象,负有的引用类型都分配在托管堆上,托管堆上分配的靶子是由GC来保管和释放的。托管堆是根据进度的,当然托管堆内部还有别的尤其复杂的布局,有趣味的能够深深摸底。

静态方法只可以访问到静态成员
静态类无法创造对象

 

参数-按引用传递:

按引用传递的多少个关键关键字:out
ref不管值类型或许引用类型,按引用传递的效劳是相同的,都不传递值副本,而是引用的引用(类似c++的指针的指针)。out

ref告知编写翻译器方法传递额是参数地址,而不是参数自个儿,领会这点很首要。

代码不难测试一下,假诺换到out效果是千篇一律的

private void DoTest( ref int a)
        {
            a *= 2;
        }

        private void DoUserTest(ref User user)
        {
            user.Age *= 2;
        }

        [NUnit.Framework.Test]
        public void DoParaTest()
        {
            int a = 10;
            DoTest(ref a);
            Console.WriteLine("a=" + a); //输出:a=20 ,a的值改变了
            User user = new User();
            user.Age = 10;
            DoUserTest(ref user);
            Console.WriteLine("user.Age=" + user.Age); //输出:user.Age=20
        }

outref的要紧异同

  • outref都提示编写翻译器传递参数地址,在作为上是同一的;
  • 他们的应用机制稍有例外,ref须要参数在利用此前要显式开始化,out要在艺术内部初叶化;
  • outref无法重载,就是不可能定义Method(ref int a)和Method(out
    int
    a)那样的重载,从编写翻译角度看,2者的真相是相同的,只是使用时有差距;

组合下图通晓,变量a及其值叁都以储存在栈上面。变量b在栈上存储,其值指向字符串“1贰叁”的托管堆对象地址(字符串是援引类型,字符串对象是储存在托管堆上面。字符串是多个例外的引用类型,后边小说会专门研究)”

二、命名空间
取名空间能够用作是类的文本夹
能够认为类是属于命名空间的。
只要在当下项目中从不那一个类的命名空间,要求我们手动的导入这一个类所在的
取名空间。
一)、用鼠标去点
2)、alt+shift+F10
3)、记住命名空间,手动的去引用

 一.值门类存款和储蓄图解:

威尼斯人线上娱乐 9 常见难点

威尼斯人线上娱乐 10

威尼斯人线上娱乐 11

三、在3个连串中引用另3个体系的类
一)、在缓解方案能源管理器的引用右键添加引用
二)、引用命名空间

威尼斯人线上娱乐 12

  标题答案解析:

值类型平昔都存款和储蓄在栈上边吗?全数的引用类型都存款和储蓄在托管堆上边吧?

三、值类型和引用类型
区别:
1、值类型和引用类型在内存上囤积的地点不均等。
二、在传递值类型和传递引用类型的时候,传递的秘诀不一致。
值类型我们称之为值传递,引用类型大家誉为引用传递。
咱俩学的值类型和引用类型:
值类型:int、double、bool、char、decimal、struct、enum
引用类型:string、自定义类、数组
存储:
值类型的值是储存在内部存款和储蓄器的栈当中。
引用类型的值是储存在内部存储器的堆中。

 

一. 值体系和引用类型的不一致?

值类型包涵简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等。

  • 1、赋值情势:将二个值类型变量赋给另三个值类型变量时,将复制包括的值。那与引用类型变量的赋值不一样,引用类型变量的赋值只复制对象的引用(即内存地址,类似C++中的指针),而不复制对象自笔者。
  • 二、继承:值类型不恐怕派生出新的类型,全部的值类型均隐式派生自
    System.ValueType。但与引用类型相同的是,结构也足以兑现接口。
  • 三、null:与引用类型差别,值类型十分的小概带有 null
    值。然则,可空类型允许将 null
    赋给值类型(他骨子里只是壹种语法情势,在clr底层做了出格处理)。
  • 4、每个值类型均有贰个隐式的默许构造函数来开头化该项指标暗中同意值,值类型开始会暗中认可为0,引用类型私下认可为null。
  • 伍、值类型存款和储蓄在栈中,引用类型存款和储蓄在托管堆中。

壹.独门的值类型变量,如一些值类型变量都以储存在栈上边的;

堆、栈、静态存储区域


二. 构造和类的分歧?

结构体是值类型,类是援引类型,主要差异如题一。别的的区分:

  • 布局不支持无惨构造函数,不辅助析构函数,并且不可能有protected修饰;
  • 结构常用于数据存款和储蓄,类class多用来行为;
  • class要求用new关键字实例化对象,struct能够不适用new关键字;
  • class能够为抽象类,struct不扶助抽象;

二.当班值日类型是自定义class的3个字段、属性时,它随引用类型存款和储蓄在托管堆上,此时她是援引类型的一片段;

int number=十;
在栈中开发多少个上空,在那一个空间存款和储蓄10,给这些空间起名称为number
string s=”1二三”;
在堆中开辟三个空间,在这么些空间存款和储蓄”1二三”,有叁个地点(引用) 0x00十01,
在栈中开发多个空中,存堆中的地址0x00拾0一,起名称为s。现在s是指向堆中的内部存款和储蓄器的

 

三. delegate是援引类型或然值类型?enum、int[]和string呢?

enum枚举是值类型,别的都以引用类型。

四.具有的引用类型肯定都是存放在托管堆上的。

Person zsPerson=new Person();
zsPerson.Name=”张三”;

 二.引用类型-字符串存款和储蓄图解:

4. 堆和栈的界别?

线程堆栈:简称栈 Stack
托管堆: 简称堆 Heap
  • 值类型大多分配在栈上,引用类型都分配在堆上;
  • 栈由操作系统一管理理,栈上的变量在其作用域实现后就被假释,效用较高,但空间有限。堆受CL揽胜极光的GC控制;
  • 栈是基于线程的,各样线程都有自身的线程栈,开首大小为1M。堆是依照进度的,三个进度分配二个堆,堆的高低由GC依据运市价况动态控制;

伍.还有一种状态,同地点标题1二,结构体(值类型)中定义引用类型字段,结构体是储存在栈上,其引述变量字段只存款和储蓄内部存款和储蓄器地址,指向堆中的引用实例。

在堆中开辟空间,在那个空间存款和储蓄 new Person();
“张3″,有四个地点(引用)
在栈中开发三个上空,存堆中的地址,起名称叫zsPerson

威尼斯人线上娱乐 13

陆.“结构”对象恐怕分配在堆上吗?什么情形下会发出,有哪些须要注意的吗?

结构是值类型,有二种意况会分配在对地点:

  • 结构作为class的三个字段或性质,会随class1起分配在堆下面;
  • 装箱后会在堆中存款和储蓄,尽量幸免值类型的装箱,值类型的拆箱和装箱都有总体性损失,下壹篇会器重关切;

指标的传递

4、字符串
一)、字符串的不可变性
当你给2个字符串重新赋值之后,老值并不曾灭绝,而是重新开发一块空间存储新值。
当程序结束后,GC扫描整个内存,要是发现壹些空间未有被针对,则立即把它销毁。

 

七. 知情参数按值传递?以及按引用传递?

  • 按值传递:对于值类型传递的它的值拷贝副本,而引用类型传递的是引用变量的内部存款和储蓄器地址,他们也许指向的同3个目标。
  • 按引用传递:通过主要字out和ref传递参数的内部存款和储蓄器地址,值类型和引用类型的意义是1致的。

将值类型的变量赋值给另贰个变量(恐怕当作参数字传送递),会实施二回值复制。将引用类型的变量赋值给另二个引用类型的变量,它复制的值是援引对象的内部存储器地址,因而赋值后就会多叁个变量指向同1个引用对象实例。当把目的作为参数字传送递的时候,都叫作按值传递。

int 重新赋值 会在原本的栈空间覆盖原值
string
重新赋值,会在原来的堆空间重新开发三个空间存新值。栈中存地址的上空不变

 

8. outref的区分与相同点?

  • outref都提示编写翻译器传递参数地址,在行为上是一样的;
  • 他俩的行使机制稍有两样,ref须求参数在选取从前要显式初步化,out要在措施内部开始化;
  • outref不得以重载,就是无法定义Method(ref int a)和Method(out
    int
    a)那样的重载,从编写翻译角度看,二者的真面目是同样的,只是选择时有区别;

威尼斯人线上娱乐 14

创建 string s1=”张三”
        string s2=”张三”
只在堆中开发一块空间 存款和储蓄”张三”
在栈中开发两块空间命名称为s一和s2指向堆中的空间(存款和储蓄堆中的地址)


9. C#支撑哪多少个预订义的值类型?C#支撑什么预约义的引用类型?

值类型:整数、浮点数、字符、bool和decimal

引用类型:Object,String

威尼斯人线上娱乐 15

 

10. 有三种办法能够看清值类型和引用类型?

简简单单的话,继承自System.ValueType的是值类型,反之是援引类型。

私家表达:

3.引用类型-自定义类存款和储蓄图解:

1一. 说说值类型和引用类型的生命周期?

值类型在功能域结束后获释。

引用类型由GC垃圾回收期回收。那么些答案大概太简单了,更详细的答案在末端的篇章会聊到。

1当你成立了S一和S二后,就会在栈中开辟八个空中

威尼斯人线上娱乐 16

1贰. 比方结构体中定义引用类型,对象在内部存款和储蓄器中是什么样存款和储蓄的?例如下边结构体中的class类 User对象是储存在栈上,照旧堆上?

public struct MyStruct 
{ 
    public int Index; 
    public User User; 
}

MyStruct存款和储蓄在栈中,其字段User的实例存款和储蓄在堆中,MyStruct.User字段存款和储蓄指向User对象的内部存款和储蓄器地址。

 

style=”font-family: 微软雅黑; font-size: small;”>版权全部,小说来源: style=”font-family: 微软雅黑; font-size: small;”>http://www.cnblogs.com/anding

style=”font-family: 微软雅黑; font-size: small;”>个人能力简单,本文内容仅供就学、探究,欢迎指正、交换。

.NET面试题解析(00)-开篇来谈谈面试 &
类别小说索引

   二个叫S一,内部存款和储蓄器地址是一千XX


  参考资料:

Value type and Reference type
Explained:

C# 值类型与引用类型
(上):

书籍:CLR via C#

图书:你必须领会的.NET

   一个叫S贰,内部存储器地址是两千XX

 

②你给S1,S2赋值的string 类型 “张三”

 引用类型存款和储蓄总计:

   是存在堆中开拓的空间内

引用类型的对象存储在堆中,并且会分配三个内部存储器地址。该内部存款和储蓄器地址会蕴藏到栈空间,栈空间名称叫变量名。

   它也有个内部存款和储蓄器地址是XX000一

即读取引用类型对象的依次:变量—>内存地址—>实例对象。

叁您栈中的S一,S2空间存的是堆中  的内部存款和储蓄器地址XX000一,他们是同3个东西

4只要您再  S一=”李四”

                    S2=“李四”

 
 它们也只是把S一,S二里面包车型地铁内部存款和储蓄器地址指向堆中开发的三个叫”李四”的空间的内部存储器地址。

   原来堆中存的”张3″不会有任何改动。

五当你清理内部存款和储蓄器的时候,那多少个”张3″因为内部存款和储蓄器地址未有被引述过,就会被清理掉(垃圾回收)

窗口-即时-及时窗口-&s一 &s2 可以看s一和s二的内部存款和储蓄器地址
上边是栈中的地方,上边是堆中的地址

威尼斯人线上娱乐 17

贰)、大家得以把字符串看做是char类型的3个只读数组。
ToCharArray();将字符串转换为char数组
new string(char[] chs):能够将char数组转换为字符串

1 string s = "abcdefg";
2 char[] chs = s.ToCharArray();
3 chs[0] = 'b';
4 s= new string(chs);
5 Console.WriteLine(s);
6 Console.ReadKey();

Stopwatch 计时器
Stopwatch sw=new Stopwatch();
sw.Start();初始计时
sw.Stop();结束计时
sw.elapsed 当前实例度量得出的总运营时刻

StringBuilder sb=new StringBuilder();

sb.Append(i);追加

能把那个i累加到sb里面

 1 StringBuilder sb = new StringBuilder();
 2 //string str = null;
 3 Stopwatch sw = new Stopwatch();
 4 sw.Start();
 5 for (int i = 0; i < 100000; i++)
 6 {
 7 //str += i;
 8 sb.Append(i);
 9 }
10 sw.Stop();
11 Console.WriteLine(sw.Elapsed);
12 Console.ReadKey();

 

string 为啥那样慢,因为它每一趟都要开空间
stringbuilder这么快是因为它在内部存储器中开空间,用来用去都以如出壹辙块类型。
最终stringbuild照旧得要tostring转为string 类型。

五、字符串提供的种种措施
//把字符串转为大写
LessonOne =LessonOne.ToUpper();
//把字符串转为小写
LessonOne=LessonOne.ToLower();
//比较两个字符串的值
LessonOne.Equals(LessonTwo,StringComparison.OrdinalIgnoreCase)
Equals同样 StringComparison.OrdinalIgnoreCase
枚举.忽略被比较的字符串的轻重写

string s = “a b c 3 12 – + _ , == fdf”;
//分割字符串Split
//把不想要的字符都写在char数组里
//数组即便干掉了,不过仍旧留了一个空””
//后边加上,StringSplitOptions.RemoveEmptyEntries把空给干掉
char[] chs = { ‘ ‘,’_’,’=’,’+’,’,’,’-‘};
string[] str = s.Split(chs,StringSplitOptions.RemoveEmptyEntries);
Console.ReadKey();

练习

Console.WriteLine("请输入日期,格式如2008-08-08");
string s = Console.ReadLine();
//可以不用创建char []chs,直接把它New在里面
string [] date= s.Split(new char [] {'-' },StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("你输入的日期是{0}年{1}月{2}日",date[0],date[1],date[2]);
Console.ReadKey();

//contains(包罗),判断字符串中是或不是含有内定的字符串

//Replace(替换) 将字符串中某些字符串替换来3个新的字符串,再次来到
练习

1 string str = "国家领导人老赵";
2 if(str.Contains("老赵"))
3 {
4 str=str.Replace("老赵","**");
5 }
6 Console.WriteLine(str);
7 Console.ReadKey();

1 //Substring 截取字符串
2 string str = "今天天气好晴朗,处处好风光";
3 //把字符串当做数组,从下标0开始截取
4 str = str.Substring(1);
5 //从“天”开始截取,截取2个字
6 str = str.Substring(1,2);
7 Console.WriteLine(str);
8 Console.ReadKey();

 1 //StartsWith()判断字符串中是否以子串value开始 
 2 //EndsWith()判断字符串中是否以子串value结束 
 3 //使用方式相同
 4 string str = "今天天气好晴朗,处处好风光";
 5 if(str.StartsWith("今天"))
 6 {
 7 Console.WriteLine("是的");
 8 }
 9 else
10 {
11 Console.WriteLine("不是");
12 }
13 Console.ReadKey();

1 //判断某个字符串在字符串中第一次出现的下标位置,如果没有返回-1,由int类型接受
2 string str = "今天天气好晴朗,处处好风光";
3 int n=str.IndexOf('天');
4 //后面加个Int类型数字,表示找字符串中的第几个‘天’的下标
5 //int n=str.IndexOf('天',2);
6 //如果要找到所有‘天’的下标,就需要用循环来找
7 Console.WriteLine(n);
8 Console.ReadKey();

1 //LastIndexOf():判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1
2 //LastIndexOf()经常和Substring配合使用
3 string path = @"c:\a\b\c\d\e\f\g\ff\苍\ds\fgd\d\苍老师.wav";
4 //找最后一个斜线后出现的文字才是最准确的,一直截到最后
5 int index=path.LastIndexOf("\\"); 两个斜线表示一个斜线

练习

1 string path = @"c:\a\b\c\d\e\f\g\ff\苍\ds\fgd\d\苍老师.wav"; @代表字符串中的\都表示\
2 int index = path.LastIndexOf("\\");字符串中\\代表一个\
3 path=path.Substring(index+1); 截取是从\开始,所以要加1
4 Console.WriteLine(path);
5 Console.ReadKey();

1 //Trim():去掉字符串中前后的空格
2 //TrimEnd():去掉字符串中结尾的空格
3 //TrimStart():去掉字符串中前面的空格
4 string str = " hahaha ";
5 str=str.Trim();
6 Console.Write(str);
7 Console.ReadKey();

 1 //string.IsNullOrEmpty():判断一个字符串是否为空或者为null
 2 string str = null;
 3 if(string.IsNullOrEmpty(str))
 4 {
 5 Console.WriteLine("是的");
 6 }
 7 else
 8 {
 9 Console.WriteLine("不是");
10 }
11 Console.ReadKey();

1 //string.Join():将数组按照指定的字符串连接,返回一个字符串。
2 string[] name = { "张三","李四","王五","赵六","田七" };
3 string str=string.Join("|", name); params可变参数:可以放数组也可以放参数
4 Console.WriteLine(str);
5 Console.ReadKey();

一)、Length:获得当前字符串中字符的个数
贰)、ToUpper():将字符转换来大写方式
三)、ToLower():将字符串转换到小写方式
四)、Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较四个字符串,能够忽略大小写
伍)、Split():分割字符串,重返字符串类型的数组。
6)、Substring():截取字符串。在截取的时候包罗要截取的十二分地方。
7)、IndexOf():判断有些字符串在字符串中首先次出现的地方,要是没有回来-一、值类型和引用类型在内部存款和储蓄器上囤积的地点不1样。
8)、LastIndexOf():判断有个别字符串在字符串中最终2遍面世的职分,即便未有1样再次回到-一
玖)、StartsWith():判断以….开首 bool类型判断
10)、EndsWith():判断以…结束 bool类型判断
1一)、Replace():将字符串中有些字符串替换到2个新的字符串
1二)、Contains():判断有个别字符串是不是带有钦定的字符串 bool类型判断
一三)、Trim():去掉字符串中左右的空格
1四)、TrimEnd():去掉字符串中最后的空格
一5)、TrimStart():去掉字符串中前边的空格
1陆)、string.IsNullOrEmpty():判断二个字符串是还是不是为空恐怕为null
一柒)、string.Join():将数组依据钦点的字符串连接,再次回到贰个字符串。

6.复习
字符串供给控制的独到之处
一)字符串不可变,每新建贰个字符串都会在内部存储器中开拓一块新的空间
二)字符串的形式

StringBuilder和String的区别
String在实行演算时(如赋值、拼接等)会发生三个新的实例,而StringBuilder则不会。
使用StringBuilder实行操作,最终再用ToString转为String类型即可。

1 string path = @"C:\Users\SJD\Desktop\22.txt"; 路径
2 string [] str= File.ReadAllLines(path,Encoding.Default); 
3 //File(静态类).ReadAllLines(方法,读取所有的行)读取的全是乱码
4 //Encoding.Default 去除乱码
5 Console.ReadKey(); 

7.练习
char类型数组转为string类型

1 char[]chs={‘1’,‘2’,‘3’};
2 string str=new string(chs);

求出字符串中享有出现的e的地方
@第贰种格局(必须会)

 1 string str = "daghdewejhadgwehhjfhajejwwe";
 2 int index = str.IndexOf('e');
 3 Console.WriteLine("第1次出现e的位置是{0}", index);
 4 int count = 1;
 5 while (index != -1)
 6 { 
 7 index = str.IndexOf('e', index + 1);
 8 count += 1;
 9 if (index == -1)
10 {
11 break;
12 }
13 Console.WriteLine("第{0}次出现e的位置是{1}", count, index);
14 }
15 Console.ReadKey();

威尼斯人线上娱乐 ,其次种办法
搜寻两个字的话就充裕

1 string str = "daghdewejhadgwehhjfhajejwwe";
2 for (int i = 0; i < str.Length; i++)
3 {
4 if(str[i]=='e')
5 {
6 Console.WriteLine(i);
7 }
8 }
9 Console.ReadKey();

8.继承
每二个类都要单独写在二个类公事里。

大家可能会在一部分类中,写一些再度的积极分子,我们得以将那几个重新的成员,
独自的卷入到多少个类中,作为这么些类的父类。

格式 子类:父类
Student、Teacher、Driver 子类 派生类
Person 父类 基类

子类继承了父类,那么子类从父类那里继承过来了什么?
第一,子类继承了父类的习性和措施,可是子类并不曾继承父类的私人住房字段。能看出也无法用
李一个有钱亲朋好友挂了,收益人是李,可是未有给她银行密码。他延续过来了却用持续。
题材:子类有未有继续父类的构造函数?
答:子类并未继续父类的构造函数,可是。子类会暗中同意的调用父类无参数的构造函数,
创立父类对象,让子类能够利用父类中的成员。
据此,假诺在父类中另行写了一个有参数的构造函数之后,这几个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。

履行完父类无参构造函数,再去履行子类的
实施父类的构造函数,就也正是创制三个父类的目的
因为未有父类的对象,子类不可能用父类的脾气
创制子类对象的时候,也顺手创制了他父类的目标,那样才能用到父类的习性和章程,成员
子类蕴涵了上下一心的质量和父类对象(构造函数),内部的父类又包括了她的性质和办法

持续构造函数的历程能够插手子类的质量

父类私下认可调用无参的而不是有参的
消除办法:
一)、在父类中另行写三个无参数的构造函数。
②)、在子类中显示的调用父类的构造函数,使用首要字:base()

玖.一而再的风味
1、继承的单根性:八个子类只可以有2个父类。
2、继承的传递性:曾外祖父-阿爹-外孙子-儿子

10.查看类图
右键类文件-视图-查看类图 能够看类之间的后续关系

1一.object是全体类的基类。
假使未有让二个类继承于别的3个类,那么那个类就持续于object

12.new关键字
1)、创立对象
2)、隐藏从父类那里继承过来的同名成员。
潜伏的结局正是子类调用不到父类的成员。

子类成员名称和父类成员名称一致,会暗藏继承的父类成员,隐藏后果正是调不到了。
加上new后只是不报错

13.复习
值类型
引用类型
字符串 不可变性
1坨方法
StringBuilder
继承 单根性
传递性
子类跟父类构造函数的关系
子类继承了父类的什么?
new关键字


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图