.net 重载、重写和隐藏?
谁能解释一下.Net中的重载、重写和隐藏是什么.net 重载、重写和隐藏?,.net,oop,.net,Oop,谁能解释一下.Net中的重载、重写和隐藏是什么 谢谢当您创建多个具有不同参数的方法时,会出现重载。例如: public class Car { public Car() { // Do stuff } public Car(int numberOfCylinders) { // Do stuff } } 公车 { 公共汽车 { //做事 } 公共汽车(国际气缸数) { //做事 } } 您可以看到构造函数具有相同的名称,但参数不同。您将在Intellis
谢谢当您创建多个具有不同参数的方法时,会出现重载。例如: public class Car { public Car() { // Do stuff } public Car(int numberOfCylinders) { // Do stuff } } 公车 { 公共汽车 { //做事 } 公共汽车(国际气缸数) { //做事 } } 您可以看到构造函数具有相同的名称,但参数不同。您将在Intellisense中的VisualStudio中看到重载的方法和构造函数,上面和下面都有小箭头,因此您可以浏览签名 重写是指从基类向方法提供新的实现。例如: public class Square { public double x; // Constructor: public Square(double x) { this.x = x; } public virtual double Area() { return x*x; } } class Cube: Square { // Constructor: public Cube(double x): base(x) { } // Calling the Area base method: public override double Area() { return (6*(base.Area())); } } 公共课广场 { 公共双x; //建造商: 公共广场(双x) { 这个.x=x; } 公共虚拟双区() { 返回x*x; } } 类立方体:正方形 { //建造商: 公共立方体(双x):底部(x) { } //调用区域基方法: 公共覆盖双区域() { 返回(6*(base.Area()); } }
请注意,在C#中,不能使用非虚拟或静态方法。重载提供了具有相同名称和不同签名的多个方法:
void Foo() {...}
void Foo(int i) {...}
重写在继承中用于更改每个子类的实现:
class SomeBase {
public virtual void Foo() {}
}
class SomeOther : SomeBase {
public override void Foo() {
// different implementation, possibly calling base.Foo();
}
}
在上述情况下,即使我这样做:
SomeBase obj = new SomeOther();
obj.Foo();
它将调用SomeOther.Foo
实现。调用的方法取决于实例的类型,而不是变量
方法隐藏则相反;它将替换方法签名,但仅在从派生类型调用方法时适用:
class SomeBase {
public void Foo() {}
}
class SomeOther : SomeBase {
public new void Foo() {
// different implementation, possibly calling base.Foo();
}
}
现在:
i、 e.方法调用取决于变量,而不是实例。重载是对单个方法或运算符的多个可能“签名”的定义。每个签名接受不同的参数,本质上是一个不同的函数,与多个函数具有不同的名称没有区别。这通常用于对概念上相似的操作进行分组,例如重载
+
以处理biginger
和String
:这两种操作似乎都可以使用+
进行(除非您认为+的所有重载都应该定义--字符串
重载没有定义)
覆盖是对同一方法签名的多个可能实现的定义,因此实现由第0个参数的运行时类型决定(通常由C#中的名称this
标识)
隐藏是派生类型中的方法定义,其签名与其基类型中的签名相同,而不重写
覆盖和隐藏的实际区别如下:
- 如果重写了某个方法,则要调用的实现将基于参数this的运行时类型
- 如果只是隐藏了一个方法,那么要调用的实现将基于参数this的编译时类型
int Add (int a, int b)
{
return a + b; // returns int
}
float Add (float a, float b)
{
return a + b; // returns float
}
重写是指派生类中的方法名和签名与基类中的方法名和签名相同。在这种情况下,我们说派生类重写基类方法。运行哪个方法取决于哪个实例调用该方法
e、 g
隐藏或封装是当您声明一个类的成员变量和方法为私有时,使它们不能被任何其他类访问,甚至不能被派生类访问
例如
重载是poly-morpsm的一个示例,可以在两个方法之间传递参数的编号、数据类型和序列 覆盖(与虚拟不同)意味着存在一些已定义的功能,但您可以在继承时给出更清晰的概念 隐藏是指隐藏内部特征并表示本质特征,这是面向对象设计概念的特征之一
谷歌获取详细信息假定您理解其他海报给出的解释,记住重载和重写之间区别的一种方法是,当使用overloading时,可能会有同名函数的“load”
愚蠢,我知道,但它对我有用。可能重复注意,在C#中,您不能重写非虚拟或静态方法。您的意思是静态方法不会被继承?您的意思是?方法重写:虚(在基中)+重写(在派生中),方法隐藏:{nothing}(在基中)+new(在派生中)这不是在此上下文中隐藏的。@完美主义者,它仍然在隐藏
int Add (int a, int b)
{
return a + b; // returns int
}
float Add (float a, float b)
{
return a + b; // returns float
}
public class Shape
{
public virtual void Draw() { }
}
public class Square : Shape
{
public override void Draw()
{
// Code to draw square
}
}
public class Circle : Shape
{
public override void Draw()
{
// Code to draw circle
}
}
private int onlyICanAccess;
private void OnlyICanExecute()
{
// ...
}