gpt4 book ai didi

c# - C# 和 PHP OOP 的区别

转载 作者:行者123 更新时间:2023-11-30 19:22:30 26 4
gpt4 key购买 nike

我有一个一般的 OOP 问题。

如果我在 C# 中有以下类

class Parent
{
public string val = "Parent";

public void getValue()
{
Console.WriteLine(this.val);
}
}

class Child:Parent
{
public string val = "Child";
}

Child child = new Child();
child.getValue();

代码输出“Parent”。据我了解,这是因为 this 指向 Parent 对象,对吗?

如果我在 PHP5 中做同样的事情:

class ParentClass {
public $val = 'parent';

public function foo()
{
echo $this->val;
}
}

class ChildClass extends ParentClass {
public $val = 'child';
}

$a = new ChildClass();
$a->foo();

结果将是“ child ”。

虽然我改变了

public $val = 'parent'; 

private $val = 'parent';

那么 PHP 也会显示“parent”。 C# 始终返回带有公共(public)和私有(private)访问修饰符的“parent”。

这有什么原因吗?哪种行为是正确的?

非常感谢任何有用的阅读链接!

谢谢!

最佳答案

在您陈述的场景中没有正确或不正确的行为。语言设计者做了他们认为有意义的事情。

您在 C# 中没有获得预期行为的原因是因为在父类中调用了 GetValue,其中“this”表示父 val。

要获得正确的行为,您可以在 Child 类中包含相同的方法,并使用 override 关键字:

public class Child
{
public string val = "Child";
public override void GetValue()
{
Console.WriteLine(val);
}
}

...这会将“Child”打印到控制台。

关于c# - C# 和 PHP OOP 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com