.Net学习 第2季02 C#面向对象继承1

.Net 视频学习第2季 C#面向对象

面向对象继承1

查找类的命名空间快捷键:alt+shift+F10

项目A中有类X,要在项目B中使用X的话,首先在项目B的引用当中添加项目A,然后在项目B的代码中添加using A;(假设项目A类X的命名空间就是A)或者在使用X时采用A.X的格式。

记录运行时间

Stopwatch sw = new Stopwatch();
sw.Start();
// 代码
sw.Stop();
Console.WriteLine(sw.Elapsed);

Start()和Stop()是类Stopwatch的方法,Elapsed是类Stopwatch的属性。

值类型的数据存储在栈中,引用类型的数据存储在堆中。

int a = 10;
string s = "123";

我自己的理解是a会映射成地址,指向栈中某位置,该位置存放的是数据10;而s同样映射成地址,指向栈中某位置,该位置存放的是另一个内存地址,此地址指向堆中某位置,该位置存放的是数据“123”。

int a = 10;
a = 20;
string s = "123";
s = "456";

string的不可变性:a是值类型,对a重新赋值后,在栈中的数据10会被新数据20所覆盖;s是引用类型,对s重新赋值后,在堆中的数据“123”没有被销毁,而是在堆中另外开辟了空间存放新数据“456”,并且将栈中原本指向“123”的地址更换为指向“456”的地址。因此被覆盖的都是栈中的数据。重复给string赋值,会在堆中产生大量没有被指向的数据。

string s1 = "123";
string s2 = "123";

对上边的代码,直观的感觉是在堆中有两块空间分别存了2个“123”,然后在栈中s1存的是指向堆中第一个“123”的地址,而s2存的是指向第二个“123”的地址。但事实是,在堆中只有一个“123”,而在栈中s1和s2存储了相同的地址内容。

可以将string看成是只读的char数组,所以可以用索引来访问,但不能修改(只读属性)。注意,这只是理解上的方便,实际上string不是char数组,只是string类里边提供了一个通过索引来访问元素的方法。

当然string类也的确提供了转换为char数组的方法:

string s = "123";
char[] chs = s.ToCharArray();

而将char数组转换为string可以用string类的构造方法之一:

string s = "123";
char[] chs = s.ToCharArray();
chs[0] = ‘0‘;
s = new string(chs);

这时候s="023",注意堆中依然存在数据“123”,只是栈中s存储的已经不是指向“123”的地址,而是指向“023”的地址。

StringBuilder sb = new StringBuilder();
string s = sb.ToString();

StringBuiler类有方法sb.Append(x);效率比重新开辟内存空间的string要高。

string类的一些属性和方法:

string s1 = "abc";string s2 = "abc";

// 通过属性Length获取字符串长度
int sl = s1.Length;

// 字符串比较(C#操作符重载,支持字符串比较)if (s1 == s2){  Console.WriteLine("s1=s2");}else{  Console.WriteLine("s1!=s2");}

// 字符串大小写转换string s3 = s1.ToUpper();string s4 = s1.ToLower();

// 同样是字符串比较,Equals()方法可以提供参数来控制比较方法,以下是比较s1和s2,同时忽略大小写
if (s1.Equals(s2, StringComparison.OrdinalIgnoreCase)){  Console.WriteLine("s1=s2");}

string的分割,Split()方法(重载6):第一个参数是char数组,存放要remove并作为分割的字符,第二个参数StringSplitOptions,枚举类型,None会将每个分隔符用NULL代替,而RemoveEmptyEntries则直接将分隔符去掉,方法返回一个string数组。

string s = "1 2 + 345 , 6";
char[] chs = {‘ ‘, ‘+‘, ‘,‘};
string[] sa = s.Split(chs,StringSplitOptions.RemoveEmptyEntries);

上述代码实现了将s中的空格,加号和逗号去掉,并且返回string数组,共4个元素,分别是“1”,“2”,“345”和“6”。

时间: 2024-10-25 09:55:56

.Net学习 第2季02 C#面向对象继承1的相关文章

.Net学习 第2季05 C#面向对象 Path类 File类

.Net 视频学习第2季 C#面向对象 面向对象 Path类 File类 Path类,命名空间IO,静态类 Path.GetFileName(str),返回文件路径中的文件名,返回值为string Path.GetFileNameWithoutExtension(str),返回文件路径中的文件名,不带扩展名,返回值为string Path.GetExtension(str),返回文件路径中的文件的扩展名,返回值为string Path.GetDirectoryName(str),返回文件所在的全

.Net学习 第2季05 C#面向对象 ArrayList

.Net 视频学习第2季 C#面向对象 面向对象 ArrayList 数组:类型单一(除非是父类数组,子类对象作元素---注意元素还是被认为是父类对象!),长度固定 int[] a = new int[10]; 集合:命名空间System.Collections ArrayList list = new ArrayList(); 往集合里边添加数据 list.Add(1); 对同一个集合,可以往里边添加任意类型的数据.(注意Add()方法的输入参数是object类,是所有类型的基类) Array

.Net学习 第2季04 C#面向对象 里氏转换 随机数 protected

.Net 视频学习第2季 C#面向对象 面向对象 里氏转换 随机数 protected 里氏转换:子类对象可以赋值给父类对象:如果父类中装的是子类对象,可以将此父类对象强制转换成子类对象. 子类对象可以调用父类成员,但父类对象永远只能调用自己的成员. is或者as均表示类型转换,is返回true/false,as返回转换后对象/null class Person { public string Name {get;set;} } class Student:Person { } class Te

数据结构与算法学习 第1季02 链表的基本功能 C++实现

2015年学习计划安排: http://www.cnblogs.com/cyrus-ho/p/4182275.html 尝试用C++实现了双向链表类LinkList,基本功能是在位置i插入结点和删除位置i的结点. 首先是结点类,每个结点有数据data,指向前一个结点的指针front和指向后一个结点的指针next class Node { public: int data; Node* next; Node* front; public: Node(); Node(int data); Node(

.Net学习 第3季02 winform应用程序 MDI窗体设计 menuStrip

窗体2.3.4...只落在窗体1(父窗体)的范围内并且可以全部显示的设计---MDI窗体设计 在窗体1中创建menuStrip类的对象(菜单栏),设置其中一个的点击事件为显示窗体2.3.4 private void 显示子窗体ToolStripMenuItem_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); Form3 f3 = new Form3(); f3.Show(); Form4 f4 = ne

.Net学习 第3季 C#面向对象 接口

.Net 视频学习第3季 C#面向对象 面向对象 接口 C++中一个类可以继承于多个类,但C#中不允许.因此如果想实现类似操作,需要接口,关键字interface public class Person { } public interface Iable { void test(); } public class Student:Person,Iable { void test() { Console.WriteLine("test"); } } 接口名通常以I开头able结尾. 接

.Net学习 第3季 C#面向对象 多态

.Net 视频学习第2季 C#面向对象 面向对象 多态 概念:让一个(父类)对象表现出多种(子类)类型的特性:三种方法:虚方法/抽象类/接口 方法一:虚方法 将父类方法标记为虚方法,使用关键字virtual在返回值类型前,这个方法可以被子类重写一遍(在子类方法返回值类型前使用关键字override) 没有使用虚方法下: public class Person { private string _name; public string Name { get{return _name;} set{_

.Net学习 第3季 C#面向对象 访问修饰符

.Net 视频学习第3季 C#面向对象 面向对象 访问修饰符 C#五种访问修饰符 1)可以修饰类的访问修饰符只有两个:public,internal(默认) internal:只可以在当前程序集(先理解为项目)中访问 public:公共的 项目A访问项目B中的public类,首先要在项目A的引用中添加项目B,然后再项目A的文件中添加using 项目B该类的命名空间. 在同一个程序集当中,public和internal的访问权限一样. 2)修饰类的成员的访问修饰符:public,private,p

.Net学习 第2季 C#面向对象

.Net 视频学习第2季 C#面向对象 面向对象初级 类是一个模板,不占内存,对象是根据模板生成的具象,占内存. 字段field:数据 方法method:函数 属性property:保护字段,对字段的赋值进行限定(将这部分封装在类中,外界不用理会如何实现)属性的本质就是两个方法 get() / set() 外部(甚至类内部的方法)通过属性对字段进行赋值/读取,get()/set()内部会进行限定,字段永远用private,属性才是public的. namespace Proj { class P