【意义】

this:指当前类,this调用当前类的属性,方法,包括构造函数的方法,继承本类的构造函数

base:指当前类的父类,可调用父类的非私有属性,方法,继承父类的构造函数括号里的参数

【用处】

一:this的用处

1.限定被相似的名称隐藏的成员,方法或函数(多数用在构造函数中)

    class Person
{
private string name;
public Person(string name)
{
this.name = name;
}
}

由于this.name中的name和入参name的名称一样,即被入参隐藏了,所以要用this限定name是本类的属性

2.将自己this对象作为参数传递给其它方法

    class Teacher
{
public void tshow()
{
Console.WriteLine("我是老师!");
Console.WriteLine(this);//显示的是本类的类名
}
}

3.声明索引器

       private int _index;
public int this[int index]
{
get { return _index; }
set { _index = index; }
}

二:base的用处(base实现了多态)
1.在子类中通过base调用父类的构造函数,即在子类初始化时和父类进行通信。

    class Program
{
static void Main(string[] args)
{
Person p = new Person("小李");
p.show();
Teacher t = new Teacher("小刘",18);
t.tshow(); Console.Read();
}
}
class Person
{
protected string name;
public Person(string name)
{
this.name = name;
}
public void show()
{
Console.WriteLine("我属于人类!");
}
}
class Teacher:Person
{ public Teacher(string name,int age)
: base(name)
{
this.Age = age;
}
private int _age;
public int Age
{
get { return _age; } //读
set { _age = value; } //写
}
public void tshow()
{
Console.WriteLine("我是学生{0}{1}!",name,Age);
}
}

2.调用基类上已被其它方法重写的方法

    class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.show();
Teacher t = new Teacher();
t.show();
Console.Read();
}
}
class Person
{
public virtual void show()
{
Console.WriteLine("我属于人类");
}
}
class Teacher:Person
{
public override void show()
{
base.show();
Console.WriteLine("我是老师");
}
}

3.调用基类的构造函数

    class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.show();
Teacher t = new Teacher();
t.tshow();
Console.Read();
}
} class Person
{
public void show()
{
Console.WriteLine("我属于人类");
}
}
class Teacher:Person
{
public void tshow()
{
base.show();
Console.WriteLine("我是老师");
}
}

【注】

在多层继承中:

1>有重载,base指向直接继承的父类

2>无重载,base可指向任意上级父类

总结】
不能在静态方法中引用this和base,因为当类第一次被加载的时候,静态成员已经被加载到静态存储区,此时类的对象还有可能能没有创建,而this和base访问的都是类的实例,也就是对象,而静态成员只能由类访问,不能由对象访问,所以静态方法中不能调用类成员字段。

C#中base 和this的更多相关文章

  1. EasyUI中Base(基础)的基本用法

    EasyUI中Base(基础)的用法 一.Base(基础) 1.parser 解析器 2.easyloader 简单加载 3.draggable 拖动 4.droppable 放置 5.resizab ...

  2. C#中base 关键字的作用

    引用:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx base base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的 ...

  3. JSP中<base href="<%=basePath%>">作用

    通常在JSP页面开通有如下代码: <% String path = request.getContextPath(); String basePath = request.getScheme() ...

  4. JSP中<base href="<%=basePath%>">的作用

    来源于:http://fanshuyao.iteye.com/blog/2097229 首先了解是什么是<base href=""> <base href=&qu ...

  5. JSP页面中 <base href="<%=basePath%>">

    base标记是一个基链接标记,是一个单标记.用以改变文件中所有连结标记的参数内定值.它只能应用于标记<head>与</head>之间.你网页上的所有相对路径在链接时都将在前面加 ...

  6. HTML中<base>标签的正确使用

    HTML <base> 标签 1.  定义:<base> 标签是 HTML 语言中的基准网址标记,是一个单标签. 2.  作用:规定页面上所有链接的默认 URL 和默认目标. ...

  7. C# 构造函数中base和this的使用。

    使用base时,首先给父类中的构造函数赋值. 使用this时,先调用父类无参构造函数,再调用自身其他构造函数并对其赋值,最后调用自身当前构造函数.

  8. 构造函数中base与this的区别

    base是对父类的引用,而this是对类本身的引用. namespace ConsoleApplication1 { public class BaseClass { private string n ...

  9. 【转】C#中base关键字的几种用法

    base其实最大的使用地方在面相对性开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法.例如: 2.1关于base调用基类构造函数 public c ...

  10. (转)C#中base关键字的几种用法

    base其实最大的使用地方在面相对性开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法.例如: 2.1关于base调用基类构造函数 public c ...

随机推荐

  1. 鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务 | 百篇博客分析OpenHarmony源码 | v41.03

    百篇博客系列篇.本篇为: v41.xx 鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁 ...

  2. 12306抢票算法居然被曝光了!!!居然是redis实现的

    导读 相信大家应该都有抢火车票的经验,每年年底,这都是一场盛宴.然而你有没有想过抢火车票这个算法是怎么实现的呢? 应该没有吧,咱们今天就来一一探讨.其实并没有你想的那么难 bitmap与位运算 red ...

  3. 数据库语法整理及WAF绕过方式

    关系型数据库 关系型数据库:指采用了关系模型来组织数据的数据库. 直白的说就是:关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 当今主流的关系型数据库有:Oracle,M ...

  4. uniapp内嵌H5页面和uniapp页面相互传值

    最近项目有一个需求 -- 做一个百人抽奖的模块,要求展示百人的头像并且不断变化排列组合 先展示一部分的用户头像,然后每增加一个用户就增加一个头像在百人排列里面 我整一个gif图来展示一下 大概就是这种 ...

  5. Multidimension Tools(多维工具)

    多维工具 # Process: 创建 NetCDF 栅格图层 arcpy.MakeNetCDFRasterLayer_md("", "", "&quo ...

  6. 题解 HDU 5279 YJC plays Minecraft

    题目传送门 题目大意 给出\(n\)以及\(a_{1,2,...,n}\),表示有\(n\)个完全图,第\(i\)个完全图大小为\(a_i\),这些完全图之间第\(i\)个完全图的点\(a_i\)与\ ...

  7. 题解 「THUPC 2017」小 L 的计算题 / Sum

    题目传送门 题目大意 给出 \(a_{1,2,...,n}\),对于 \(\forall k\in [1,n]\) ,求出: \[\sum_{i=1}^{n}a_i^k \] \(n\le 2\tim ...

  8. [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上)

    [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 目录 [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 0x00 摘要 0x01 总体逻辑 0x02 废弃 ...

  9. C++ cin和while cin

    int main(){ string input; vector<string> arr; while(cin >> input) { cout << " ...

  10. 【Linux命令063】Linux非常简单常用的入门命令

    Linux常用命令 这是一篇我在公众号上发布的文章,还算较为受欢迎. 博客园这边荒废好长时间了,主要是最近一年经常撰写的文章都是Linux相关的入门文章. 不知道是否能通过博客园的首页审核. 1.cd ...