动态类型和静态类型C# - c#

我正在试验C#,并构建了以下程序(请参见下文)。

我知道first的动态和静态类型是C。对于second,动态类型也是C,但是静态类型是A。现在,我想知道这可能会派上用场吗?

我也很明显地注意到Visual Studio不允许我调用second.CallA()

现在注意,当我在所有三种静态类型上调用DoA()时,动态类型为C。在这种情况下,this为什么不指向该类?如果我记得在Java中正确(我可能会误会),则self.methodA()将开始从调用者实例中查找继承树。因为这里看起来不像那样。我可以创造这种行为吗?还是这是语言的限制?

public class A
{
    public void methodA()
    {
        Console.WriteLine("I am class A!");
    }
    public void DoA()
    {
        Console.Write("The type of this: " + this.GetType() + " - ");
        this.methodA();
    }
}
public class B : A
{
    public void methodA()
    {
        Console.WriteLine("I am class B!");
    }
}
public class C : B
{
    public void methodA()
    {
        Console.WriteLine("I am class C!");
    }
}


class Program
{
    static void Main(string[] args)
    {
        C first = new C();
        A second = new C();
        dynamic third = new C();

        //Show the types of both

        Console.WriteLine(first.GetType() + "\n" + second.GetType() + "\n" + third.GetType());
        first.methodA();
        second.methodA();
        third.methodA();

        first.DoA();
        second.DoA();
        third.DoA();



        Console.ReadLine();
    }

输出:

C
C
C
I am class C!
I am class A!
I am class C!
The type of this: C - I am class A!
The type of this: C - I am class A!
The type of this: C - I am class A!

参考方案

我可以创造这种行为吗?还是这是语言的限制?

您可以创建这种行为。为此,您需要使方法虚拟化。这将为您提供这种行为,而根本不用动态。

public class A
{
    public virtual void methodA()
    {
        Console.WriteLine("I am class A!");
    }

然后,稍后:

public class B : A
{
    public override void methodA()
    {
        Console.WriteLine("I am class B!");
    }
}

在C#中,您必须显式地将方法虚拟化。在Java中,默认情况下方法实际上是虚拟的。这不是语言的限制-只是两种语言之间的差异。

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…

Json到php,json_decode返回NULL - php

我正在用PHP进行JSON解析器的一些API,用于存储有关遗产的信息。我在解析时遇到问题,因为它返回的是NULL值而不是数组或对象。简单的JSON代码可以很好地解析,但是可以这样:{"success":true,"totalCount":1,"data":[{"id":99694…

将ajax的值存储到javascript变量中 - javascript

我有一个php文件,其中我从服务器获取数据。该php文件的输出是一个包含json格式数据的变量。PHP文件:<?php $dbHostName = "localhost"; $dbUserName = "venseld"; $dbUserPass = "wecuuu"; $dbName = &…