c#中this和base的区别

综合来说:
this相当于自己的指针;base相当于父类的指针;
一般只需要对自己操作就行了。如果是你自己写的类,继承了别的类,就会用到base了。

以下为MSDN上得帮助解释;

base 关键字用于从派生类中访问基类的成员:

调用基类上已被其他方法重写的方法。

指定创建派生类实例时应调用的基类构造函数。

基类访问只能在构造函数、实例方法或实例属性访问器中进行。

从静态方法中使用 base 关键字是错误的。

示例
在本例中,基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法。通过使用base 关键字,可以从派生类中调用基类的Getinfo 方法。

复制
using System;
public class Person
{

protected string ssn = “444-55-6666”;
protected string name = “John L. Malgraine”;
public virtual void GetInfo()

{

扫描二维码关注公众号,回复: 10941297 查看本文章
  Console.WriteLine("Name: {0}", name);

  Console.WriteLine("SSN: {0}", ssn);

}
}
class Employee : Person
{

public string id = “ABC567EFG”;
public override void GetInfo()

{

 // Calling the base class GetInfo method:

  base.GetInfo();

 Console.WriteLine("Employee ID: {0}", id);

}
}

class TestClass
{

static void Main()

{

 Employee E = new Employee();

 E.GetInfo();

}
}
本示例显示如何指定在创建派生类实例时调用的基类构造函数。

复制
// keywords_base2.cs
using System;
public class BaseClass
{

int num;

public BaseClass()

{

Console.WriteLine(“in BaseClass()”);

}

public BaseClass(int i)

{

num = i;

Console.WriteLine("in BaseClass(int i)");

}

public int GetNum()

{

 return num;

}
}

public class DerivedClass : BaseClass
{
// This constructor will call BaseClass.BaseClass()

public DerivedClass() : base()

{

}

// This constructor will call BaseClass.BaseClass(int i)

public DerivedClass(int i) : base(i)

{

}

static void Main()

{

DerivedClass md = new DerivedClass();

DerivedClass md1 = new DerivedClass(1);

}
}

输出
Name: John L. Malgraine
SSN: 444-55-6666
Employee ID: ABC567EFG
有关其他示例,请参见 new、virtual 和override。

输出
in BaseClass()
in BaseClass(int i)

this 关键字引用类的当前实例。

以下是 this 的常用用途:

限定被相似的名称隐藏的成员,例如:

复制
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
将对象作为参数传递到其他方法,例如:

复制
CalcTax(this);
声明索引器,例如:

复制
public int this [int param]
{
get { return array[param]; }
set { array[param] = value; }
}
由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。在静态方法中引用 this 是错误的。

示例
在本例中,this 用于限定 Employee 类成员 name 和 alias,它们都被相似的名称隐藏。this 还用于将对象传递到属于其他类的方法CalcTax。

复制
// keywords_this.cs
// this example
using System;
class Employee
{

private string name;

private string alias;

private decimal salary = 3000.00m;

// Constructor:

public Employee(string name, string alias)

{

// Use this to qualify the fields, name and alias:

this.name = name;

 this.alias = alias;

}

// Printing method:

public void printEmployee()

{

Console.WriteLine("Name: {0}\nAlias: {1}", name, alias);

// Passing the object to the CalcTax method by using this:

 Console.WriteLine("Taxes: {0:C}", Tax.CalcTax(this));

}

public decimal Salary

{

get { return salary; }

}
}
class Tax
{

public static decimal CalcTax(Employee E)

{
return 0.08m * E.Salary;

}
}

class MainClass
{

static void Main()

{

// Create objects:

Employee E1 = new Employee(“John M. Trainer”, “jtrainer”);

// Display results:

E1.printEmployee();

}
}
输出
Name: John M. Trainer
Alias: jtrainer
Taxes: $240.00
————————————————

本文转载:https://blog.csdn.net/zzjiadw/article/details/6715167

发布了8 篇原创文章 · 获赞 4 · 访问量 201

猜你喜欢

转载自blog.csdn.net/weixin_43937283/article/details/105414448