C#基础——面向对象的继承

  1. 对面向对象基础概念的一些总结,以后有空会写一个面向对象基础的文章。

(1)Person  LaoLi=new Person();     //这里的new开辟了内存空间,创建了对象,同时还调用了构造函数。

(2)构造函数:

public Student(string name,int age,char gender)
{
    this.Name=name;
    this.Age=age;
    this.Gender=gender;
}
public Student(string name,char gender):this(name,0,gender)
{
    
}

(3)值类型和引用类型,在内存上存储地方不一样。

值类型:int,double,decimal,struct,enum;              存储在栈

引用类型:string,自定义class,数组                     存储在堆,同时栈中也会有存一个堆的地址。

(4)字符串的不可变性

给一个字符串赋值了,不是不可以不改变值,而是改变值以后,在堆中开辟新的空间去存值,栈中存的地址也会改变。

GC(garbage collection)会将没有指向的堆,回收。

于是,大量字符串的操作就要用到stringbuilder

StringBuilder sb=new StringBuilder();
string str=null;
Stopwatch sw=new Stopwatch();
sw.Start();
for(int i=0;i<1000;i++)
{
str+=i;            //很慢,因为要一直开空间
sb.Append(i);      //很快,因为一直用的同一个内存,Append就是往这里面增加数
}
sw.Stop();
string a=sb.ToString();//最后使用转化为字符串
Console.WriteLine(sw.Elapsed);

(5)字符串常用方法

.ToUpper();//大写

.ToLower();//小写

stri1.Equals(str2,StringComparison.OrdinalIgnoreCase)//忽略大小写比较

(6)去除字符串中无意义字符

string s="a b c +   ,   d";
char[] c={' ','+',','};
string[] str=s.Split(c,StringSplitOptions.RemoveEmptyEntries);//不写后面的一串,就是将无意义字符变为空,但是还是占了位置
string[] str=s.Split(new char[]{' ','+',','},StringSplitOptions.RemoveEmptyEntries);

(7)字符串转char类型数组

char[] c=str.ToCharArray();

 

2.继承

(1)Person是父类,Stuent是子类。

Person如果写了构造函数,会覆盖空的构造函数。这个时候要么,给Person再写一个空的构造函数,要么用下面的语法继承

public Student(string name,int age,char gender,int id)
:base(name,age,gender)
{

this.Id=id;
}

(2)Person是父类,Stuent是子类。

都有一个SayHello的方法,子类是调用不到父类的这个重名方法的。

public void SayHello();

如果要在子类故意隐藏父类这个方法,使用 new:    public  new void SayHello();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值