C#中base 和this
【意义】
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的更多相关文章
- EasyUI中Base(基础)的基本用法
EasyUI中Base(基础)的用法 一.Base(基础) 1.parser 解析器 2.easyloader 简单加载 3.draggable 拖动 4.droppable 放置 5.resizab ...
- C#中base 关键字的作用
引用:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx base base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的 ...
- JSP中<base href="<%=basePath%>">作用
通常在JSP页面开通有如下代码: <% String path = request.getContextPath(); String basePath = request.getScheme() ...
- JSP中<base href="<%=basePath%>">的作用
来源于:http://fanshuyao.iteye.com/blog/2097229 首先了解是什么是<base href=""> <base href=&qu ...
- JSP页面中 <base href="<%=basePath%>">
base标记是一个基链接标记,是一个单标记.用以改变文件中所有连结标记的参数内定值.它只能应用于标记<head>与</head>之间.你网页上的所有相对路径在链接时都将在前面加 ...
- HTML中<base>标签的正确使用
HTML <base> 标签 1. 定义:<base> 标签是 HTML 语言中的基准网址标记,是一个单标签. 2. 作用:规定页面上所有链接的默认 URL 和默认目标. ...
- C# 构造函数中base和this的使用。
使用base时,首先给父类中的构造函数赋值. 使用this时,先调用父类无参构造函数,再调用自身其他构造函数并对其赋值,最后调用自身当前构造函数.
- 构造函数中base与this的区别
base是对父类的引用,而this是对类本身的引用. namespace ConsoleApplication1 { public class BaseClass { private string n ...
- 【转】C#中base关键字的几种用法
base其实最大的使用地方在面相对性开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法.例如: 2.1关于base调用基类构造函数 public c ...
- (转)C#中base关键字的几种用法
base其实最大的使用地方在面相对性开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法.例如: 2.1关于base调用基类构造函数 public c ...
随机推荐
- Loj#6053-简单的函数【Min25筛】
正题 题目链接:https://loj.ac/p/6053 题目大意 定义一个积性函数\(f(p^c)=p\ xor\ c\),求\(\sum_{i=1}^nf(i)\) 解题思路 异或这个东西不太好 ...
- NOI.AC#2007-light【根号分治】
正题 题目链接:http://noi.ac/problem/2007 题目大意 \(n\)个格子排成一排,每个格子有一个\(0/1\)和一个颜色.开始每个格子都是\(0\),\(q\)次操作取反一个颜 ...
- WPF进阶技巧和实战03-控件(1-控件及内容控件)
所有控件都继承自System.Windows.Controls.Control类,这个类添加一些基本结构: 设置控件内容对齐方式 (HorizontalContentAlignment,Vertica ...
- git批量处理git author和commit
最近在做自己项目的时候,由于使用了git全局配置的用户名和邮箱,导致自己私人的仓库里面的所有提交记录都是用的公司的邮箱和用户名,于是想批量替换一下. 可以在需要修改的项目的根目录下使用如下命令,进行批 ...
- Java 集合基础入门,看这篇就够了
集合 1.父接口:Collection java.util.Collection 是进行单对象保存的最大父接口,即每次利用 Collection 接口都只能保存一个对象信息.定义如下: public ...
- VMware vSphere 7 Update 3 下载
请访问原文链接:https://sysin.org/blog/vmware-vsphere-7-u3/,查看最新版.原创作品,转载请保留出处. vSphere 7 Update 3 已经宣布可用,即将 ...
- oracle dg failover灾难切换
oracle dg failover灾难切换SQL> alter database recover managed standby database finish force;SQL> a ...
- Golang通脉之数组
数组是同一种数据类型元素的集合.数组在内存中都是连续存放的. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为int的数组 ...
- 【c++ Prime 学习笔记】第5章 语句
C++提供了一组控制流语句,包括条件执行语句.循环语句.跳转语句. 5.1 简单语句 空语句 ; ,最简单的语句 别漏写分号,也别多写 while(cin>>s && s! ...
- 第5次 Beta Scrum Meeting
本次会议为Beta阶段第6次Scrum Meeting会议 会议概要 会议时间:2021年6月6日 会议地点:「腾讯会议」线上进行 会议时长:10min 会议内容简介:对完成工作进行阶段性汇报:对下一 ...