基础笔记,NET面试题解析

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

  连串作品目录地址:

一.值项目与引用类型的分别:

一.字段、属性、方法、构造函数
字段:存款和储蓄数据
属性:珍惜字段,对字段的取值和设值实行界定
艺术:描述对象的一言一行
构造函数:初阶化对象(给指标的种种属性依次的赋值)
类中成员,假诺不加访问修饰符,暗中同意都以private
给每3个私人住房的字段都布置2个国有的习性
特性的本色正是五个方法

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

.NET面试题解析(00)-开篇来研讨面试 &
种类文章索引

CL昂Cora扶助四只品种:引用类型值类型。那是.NET语言的底子和根本,他们从类型定义、实例创造、参数传递,到内部存储器分配都有所区别。

当大家成立好对象后
给那些目的的性质赋值用set
打字与印刷那性格格的值的时候实施get

  1. 值类型和引用类型在内存上囤积的地点不雷同。值类型的值是储存在内存的栈个中。引用类型的值是储存在内部存款和储蓄器的堆中。
  2. 在传递值类型和传递引用类型的时候,传递格局不均等。值类型大家称之为值传递,引用类型大家誉为引用传递。

  常汇合试标题:

  1. 值类型和引用类型的区分?

  2. 结构和类的分别?

  3. delegate是援引类型恐怕值类型?enum、int[]和string呢?

  4. 堆和栈的分别?

  5. 怎样情况下会在堆(栈)上分红数据?它们有总体性上的差异吧?

6.“结构”对象大概分配在堆上吗?什么情状下会发生,有啥要求小心的吧?

  1. 了然参数按值传递?以及按引用传递?

  2. outref 的界别与相同点?

  3. C#支持哪多少个预订义的值类型?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奥迪Q3帮助八只品种:引用类型值类型。那是.NET语言的底蕴和要紧,他们从类型定义、实例创造、参数字传送递,到内部存款和储蓄器分配都有所差异。纵然看起来差不离,但着实掌握其内涵的人却就像是并不多。

美高梅开户网址 3

图表引用

下图清晰了展现了.NET中项目分类,值类型首如若局地大致的、基础的数据类型,引用类型首要用来更拉长的、复杂的、复合的数据类型。

美高梅开户网址 4

美高梅开户网址 5

new:一、在内部存储器中开发壹块空间
2、在开辟的半空中创制对象
3、调用对象的构造函数

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

美高梅开户网址 6 内部存款和储蓄器结构

值类型和引用类型最根源的分别正是其内部存款和储蓄器分配的异样,在那后面率先要知道CL猎豹CS陆的内部存款和储蓄器中多少个重点的定义:

Stack 栈:线程栈,由操作系统一管理理,存放值类型、引用类型变量(正是引用对象在托管堆上的地点)。栈是基于线程的,也正是说3个线程会蕴藏二个线程栈,线程栈中的值类型在对象功能域截止后会被清理,效能很高。

GC
Heap托管堆
:进度开头化后在进度地址空间上划分的内部存款和储蓄器空间,存款和储蓄.NET运维进程中的对象,具有的引用类型都分配在托管堆上,托管堆上分配的靶子是由GC来治本和假释的。托管堆是依据进度的,当然托管堆内部还有任何更为复杂的结构,有趣味的能够深远摸底。

整合下图精通,变量a及其值3都以储存在栈上边。变量b在栈上存款和储蓄,其值指向字符串“12三”的托管堆对象地址(字符串是援引类型,字符串对象是储存在托管堆上面。字符串是3个出奇的引用类型,前面作品会尤其斟酌)”

美高梅开户网址 7

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

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

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

4.颇具的引用类型肯定都以存放在托管堆上的。

伍.还有1种状态,同位置题目1二,结构体(值类型)中定义引用类型字段,结构体是储存在栈上,其引用变量字段只存储内存地址,指向堆中的引用实例。

值类型和引用类型最根源的区别就是其内部存款和储蓄器分配的差距,在那此前率先要驾驭CLLAND的内部存款和储蓄器中多个非常重要的概念:

限定:set get 构造函数

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

美高梅开户网址 8 对象的传递

将值类型的变量赋值给另二个变量(或许作为参数传递),会举行一回值复制。将引用类型的变量赋值给另二个引用类型的变量,它复制的值是引用对象的内部存款和储蓄器地址,因而赋值后就会多少个变量指向同八个引用对象实例。理解这点十分首要,上边代码测试注脚一(Wissu)下:

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
:线程栈,由操作系统一管理理,存放值类型、引用类型变量(就是引用对象在托管堆上的地点)。栈是基于线程的,也正是说2个线程会包蕴一个线程栈,线程栈中的值类型在对象功效域甘休后会被清理,功能很高。

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


参数-按值传递:

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对象实例的内存地址)拷贝副本,由此他们操作都是同三个User对象实例。

GC
Heap托管堆
:进度开始化后在进程地址空间上划分的内部存款和储蓄器空间,存款和储蓄.NET运营进度中的对象,富有的引用类型都分配在托管堆上,托管堆上分配的指标是由GC来管理和自由的。托管堆是基于进程的,当然托管堆内部还有其余尤其复杂的组织,有趣味的能够深深明白。

静态方法只可以访问到静态成员
静态类不可能成立对象

 

基础笔记,NET面试题解析。参数-按引用传递:

按引用传递的多个重大关键字: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)那样的重载,从编写翻译角度看,二者的精神是平等的,只是采纳时有差别;

组合下图驾驭,变量a及其值叁都以储存在栈上边。变量b在栈上存款和储蓄,其值指向字符串“1二三”的托管堆对象地址(字符串是援引类型,字符串对象是储存在托管堆上边。字符串是三个非同一般的引用类型,前面作品会特地斟酌)”

二、命名空间
取名空间能够当作是类的文本夹
能够认为类是属于命名空间的。
只要在现阶段项目中从未这些类的命名空间,供给我们手动的导入这么些类所在的
命名空间。
一)、用鼠标去点
2)、alt+shift+F10
三)、记住命名空间,手动的去引用

 壹.值种类存款和储蓄图解:

美高梅开户网址 9 常见难题

美高梅开户网址 10

美高梅开户网址 11

三、在3个门类中引用另三个门类的类
一)、在化解方案能源管理器的引用右键添加引用
贰)、引用命名空间

美高梅开户网址 12

  标题答案解析:

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

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

 

1. 值项目和引用类型的分别?

值类型蕴含不难类型、结构体类型和枚举类型,引用类型包蕴自定义类、数组、接口、委托等。

  • 一、赋值方式:将三个值类型变量赋给另三个值类型变量时,将复制包蕴的值。那与引用类型变量的赋值不相同,引用类型变量的赋值只复制对象的引用(即内部存款和储蓄器地址,类似C++中的指针),而不复制对象自笔者。
  • 二、继承:值类型不容许派生出新的门类,全体的值类型均隐式派生自
    System.ValueType。但与引用类型相同的是,结构也足以实现接口。
  • 叁、null:与引用类型差别,值类型不恐怕带有 null
    值。但是,可空类型允许将 null
    赋给值类型(他骨子里只是1种语法格局,在clr底层做了特种处理)。
  • 四、每个值类型均有3个隐式的暗中认可构造函数来初阶化该项目标私下认可值,值类型发轫会暗许为0,引用类型默许为null。
  • 五、值类型存款和储蓄在栈中,引用类型存款和储蓄在托管堆中。

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

堆、栈、静态存储区域


二. 组织和类的界别?

结构体是值类型,类是援引类型,首要不一样如题一。别的的分别:

  • 协会不帮忙无惨构造函数,不支持析构函数,并且不可能有protected修饰;
  • 组织常用于数据存款和储蓄,类class多用来行为;
  • class供给用new关键字实例化对象,struct能够不适用new关键字;
  • class能够为抽象类,struct不协理抽象;

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

int number=十;
在栈中开辟2个空间,在这几个空间存款和储蓄10,给这几个空间起名称为number
string s=”1二三”;
在堆中开拓1个空中,在那一个空间存款和储蓄”1贰3″,有1个地址(引用) 0x00100一,
在栈中开辟1个上空,存堆中的地址0x00拾0一,起名为s。未来s是指向堆中的内部存款和储蓄器的

 

三. delegate是引用类型只怕值类型?enum、int[]和string呢?

enum枚举是值类型,其余都以援引类型。

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

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

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

4. 堆和栈的分别?

线程堆栈:简称栈 Stack
托管堆: 简称堆 Heap
  • 值类型大多分配在栈上,引用类型都分配在堆上;
  • 栈由操作系统一管理理,栈上的变量在其功效域完结后就被释放,功用较高,但空间有限。堆受CL纳瓦拉的GC控制;
  • 栈是基于线程的,每种线程都有投机的线程栈,起先大小为1M。堆是依照进度的,三个历程分配三个堆,堆的高低由GC依据运营状态动态控制;

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

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

美高梅开户网址 13

陆.“结构”对象大概分配在堆上吗?什么动静下会时有产生,有怎么着供给注意的吗?

协会是值类型,有三种状态会分配在对地点:

  • 协会作为class的1个字段或性质,会随class壹起分配在堆上边;
  • 装箱后会在堆中存款和储蓄,尽量防止值类型的装箱,值类型的拆箱和装箱都有总体性损失,下壹篇会首要关心;

对象的传递

4、字符串
1)、字符串的不可变性
当你给一个字符串重新赋值之后,老值并从未灭绝,而是重新开发1块空间存储新值。
当程序停止后,GC扫描整个内部存款和储蓄器,如果发现部分空间未有被针对,则马上把它销毁。

 

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

  • 按值传递:对于值类型传递的它的值拷贝副本,而引用类型传递的是引用变量的内部存款和储蓄器地址,他们依然指向的同一个目的。
  • 按引用传递:通过重要字out和ref传递参数的内部存款和储蓄器地址,值类型和引用类型的作用是同等的。

将值类型的变量赋值给另一个变量(可能作为参数字传送递),会进行二次值复制。将引用类型的变量赋值给另二个引用类型的变量,它复制的值是引用对象的内存地址,因而赋值后就会多三个变量指向同2个引用对象实例。当把对象作为参数字传送递的时候,都称呼按值传递。

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

 

8. outref的分别与相同点?

  • outref美高梅开户网址 ,都提醒编写翻译器传递参数地址,在作为上是一致的;
  • 她俩的使用机制稍有例外,ref供给参数在应用以前要显式先导化,out要在点子内部初步化;
  • outref不得以重载,便是不可能定义Method(ref int a)和Method(out
    int
    a)那样的重载,从编写翻译角度看,2者的精神是一样的,只是利用时有分化;

美高梅开户网址 14

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


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

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

引用类型:Object,String

美高梅开户网址 15

 

10. 有两种情势可以判明值类型和引用类型?

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

民用说明:

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

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

值类型在成效域停止后释放。

引用类型由GC垃圾回收期回收。那么些答案恐怕太简单了,更详细的答案在末端的小说会谈到。

壹当您创建了S一和S二后,就会在栈中开辟四个空中

美高梅开户网址 16

12. 只要结构体中定义引用类型,对象在内部存款和储蓄器中是什么存款和储蓄的?例如上边结构体中的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)-开篇来商讨面试 &
连串作品索引

   2个叫S一,内部存款和储蓄器地址是壹仟XX


  参考资料:

Value type and Reference type
Explained:

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

书籍:CLR via C#

书籍:你必须知道的.NET

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

 

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

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

   是存在堆中开拓的上空内

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

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

即读取引用类型对象的逐壹:变量—>内部存款和储蓄器地址—>实例对象。

三你栈中的S一,S2空间存的是堆中  的内部存储器地址XX000一,他们是同三个东西

4即便您再  S壹=”李4″

                    S2=“李四”

 
 它们也只是把S一,S贰里面的内部存款和储蓄器地址指向堆中开拓的一个叫”李4″的长空的内部存款和储蓄器地址。

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

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

窗口-即时-及时窗口-&s1 &s二 能够看s一和s二的内部存款和储蓄器地址
上边是栈中的地点,上面是堆中的地址

美高梅开户网址 17

二)、大家可以把字符串看做是char类型的二个只读数组。
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 类型。

5、字符串提供的各类措施
//把字符串转为大写
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(替换) 将字符串中有些字符串替换来贰个新的字符串,重返
练习

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:获得当前字符串中字符的个数
2)、ToUpper():将字符转换到大写方式
3)、ToLower():将字符串转换来小写方式
四)、Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较四个字符串,能够忽略大小写
5)、Split():分割字符串,再次来到字符串类型的数组。
陆)、Substring():截取字符串。在截取的时候包罗要截取的要命地点。
柒)、IndexOf():判断有个别字符串在字符串中第一回出现的职位,假若未有回来-壹、值类型和引用类型在内部存款和储蓄器上囤积的地方不1样。
捌)、LastIndexOf():判断有个别字符串在字符串中最终3回面世的义务,倘若未有一样再次回到-1
九)、StartsWith():判断以….开端 bool类型判断
拾)、EndsWith():判断以…停止 bool类型判断
1一)、Replace():将字符串中有些字符串替换到3个新的字符串
1二)、Contains():判断有个别字符串是还是不是包蕴内定的字符串 bool类型判断
一三)、Trim():去掉字符串中上下的空格
14)、TrimEnd():去掉字符串中最后的空格
一伍)、TrimStart():去掉字符串中后面包车型客车空格
1六)、string.IsNullOrEmpty():判断1个字符串是还是不是为空或然为null
一柒)、string.Join():将数组根据钦赐的字符串连接,再次回到一个字符串。

6.复习
字符串需求领悟的帮助和益处
1)字符串不可变,每新建三个字符串都会在内部存款和储蓄器中开辟1块新的上空
2)字符串的方法

StringBuilder和String的区别
String在开始展览演算时(如赋值、拼接等)会生出1个新的实例,而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种艺术
查找几个字的话就那些

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.继承
每二个类都要独立写在二个类公事里。

作者们恐怕会在有的类中,写1些重复的成员,大家得以将那个再一次的分子,
独立的包裹到贰个类中,作为这一个类的父类。

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

子类继承了父类,那么子类从父类这里继承过来了如何?
率先,子类继承了父类的属性和办法,不过子类并从未持续父类的私有字段。能来看也无法用
李三个有钱亲朋好友挂了,受益人是李,不过尚未给他银行密码。他持续过来了却用持续。
标题:子类有未有一而再父类的构造函数?
答:子类并不曾继承父类的构造函数,可是。子类会暗许的调用父类无参数的构造函数,
开创父类对象,让子类能够行使父类中的成员。
为此,倘若在父类中重新写了3个有参数的构造函数之后,那多少个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。

施行完父类无参构造函数,再去实践子类的
进行父类的构造函数,就一定于成立1个父类的对象
因为从没父类的靶子,子类无法用父类的性质
始建子类对象的时候,也顺便创设了她父类的对象,这样才能用到父类的品质和办法,成员
子类包涵了协调的本性和父类对象(构造函数),内部的父类又饱含了他的质量和方法

继续构造函数的进度能够参预子类的习性

父类默许调用无参的而不是有参的
消除办法:
一)、在父类中重新写二个无参数的构造函数。
2)、在子类中突显的调用父类的构造函数,使用首要字:base()

九.连任的特征
1、继承的单根性:三个子类只好有三个父类。
贰、继承的传递性:外祖父-父亲-外孙子-孙子

10.查看类图
右键类文件-视图-查看类图 能够看类之间的三番伍遍关系

1一.object是全部类的基类。
借使未有让贰个类继承于此外三个类,那么那些类就持续于object

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

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

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

发表评论

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

网站地图xml地图