c#的重写方法重写使用那个关键字
时间: 2023-10-28 16:31:45 浏览: 169
在 C# 中,重写(Override)方法需要使用关键字 `override`。使用 `override` 关键字可以让子类中的方法重写(覆盖)父类中的同名方法。重写方法必须与父类中的方法有相同的名称、参数列表和返回类型。在重写方法中,可以通过 `base` 关键字调用父类中的方法,也可以实现自己的逻辑。下面是一个重写方法的示例代码:
```csharp
public class Animal
{
public virtual void Speak()
{
Console.WriteLine("I am an animal.");
}
}
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("I am a dog.");
base.Speak();
}
}
```
在上面的示例中,`Animal` 类中有一个名为 `Speak` 的虚方法,在 `Dog` 类中使用 `override` 关键字重写了 `Animal` 类中的 `Speak` 方法,并在方法中调用了父类的 `Speak` 方法。当我们创建一个 `Dog` 类的对象并调用 `Speak` 方法时,会输出:
```
I am a dog.
I am an animal.
```
相关问题
C# 重写重载多态
### C# 中重写、重载和多态的概念及用法
#### 重写 (Override)
重写是指子类重新定义父类中的虚方法或抽象方法的行为。为了使方法能够被重写,在基类中需声明此方法为 `virtual` 或者 `abstract`,而在派生类中则使用 `override` 关键字来覆盖该方法。
```csharp
class Animal {
public virtual void MakeSound() {
Console.WriteLine("The animal makes a sound");
}
}
class Dog : Animal {
public override void MakeSound() {
Console.WriteLine("Woof!");
}
}
```
当创建一个 `Dog` 类型的对象并调用其 `MakeSound()` 方法时,将会执行的是 `Dog` 类里定义的那个版本[^4]。
#### 重载 (Overloading)
重载指的是在同一作用域内允许存在多个具有相同名称但参数列表不同的方法。这使得同一个名字可以根据传入的不同类型的参数表现出不同的行为。
```csharp
public class Calculator {
// 加两个整数
public int Add(int num1, int num2) => num1 + num2;
// 加两个浮点数
public double Add(double num1, double num2) => num1 + num2;
// 加三个整数
public int Add(int num1, int num2, int num3) => num1 + num2 + num3;
}
```
上述例子展示了如何在一个类内部通过改变输入参数的数量或类型来进行方法的重载[^3]。
#### 多态 (Polymorphism)
多态意味着同一操作作用于不同对象上会产生不同类型的结果。在C#中主要体现在编译期绑定(早绑定)和运行时期绑定(晚绑定)。对于后者来说,即使变量声明为基类类型,实际指向的是派生类实例的情况下也能正确调用到对应的成员函数。
```csharp
Animal myPet = new Dog();
myPet.MakeSound(); // 输出 "Woof!"
```
这里虽然 `myPet` 被声明成 `Animal` 类型,但由于它是基于 `Dog` 的实例创建出来的,所以最终会调用 `Dog` 版本的方法而不是默认的 `Animal` 实现[^1]。
c# this关键字
在 C# 中,`this` 关键字是一个特殊的引用词法,它指向当前实例自身。无论在构造函数、成员方法还是属性访问中,`this` 都表示当前对象。这里有几个关键点:
1. **构造函数**: 当在一个构造函数内部调用另一个构造函数(即构造链),`this` 指向正在构建的对象。例如:
```csharp
public MyObject(string name)
{
this.Name = name; // 这里this指代新创建的MyObject实例
}
```
2. **方法成员**:在方法内部,`this` 可以用来引用当前对象的状态,比如访问类字段或调用其他成员方法。
3. **作为参数传递**:当类的成员方法被重写,并通过委托或其他形式被调用时,`this` 有时可以作为第一个参数传递给重写的基类方法。
4. **静态成员访问**:静态成员(Static)没有与之关联的对象,所以它们不能直接使用 `this` 关键字。
总之,`this` 关键字帮助我们在类的不同层次结构中明确地引用对象本身,尤其是在处理构造函数、继承和方法间的交互时非常有用。
阅读全文
相关推荐
















