C#如何访问已实现接口中不存在的对象属性

问题描述 投票:0回答:1

请考虑以下代码。我有一个名为IClass的接口。

public interface IClass
{
    public string MyProperty { get; set; }
}

而且我有两个实现此接口的类:

public class ClassA : IClass
{
    public string MyProperty { get; set; }
}

public class ClassB : IClass
{
    public string MyProperty { get; set; }
    public string MyProperty2 { get; set; }
}

最后我有一个返回IClass接口的方法:

public static IClass MethodA()
{
    return new ClassB { MyProperty = "A", MyProperty2 = "B" };
}

我的问题是我无法从MethodA访问MyProperty2

static void Main(string[] args)
{
    Console.WriteLine(JsonSerializer.Serialize(MethodA()));
}

仅返回{"MyProperty":"A"}我如何在不使用多态模型绑定的情况下实际获得MyProperty2?还有其他方法吗?

c# .net asp.net-core interface polymorphism
1个回答
1
投票

您需要投射

Console.WriteLine(JsonSerializer.Serialize((ClassB) MethodA()))

但是,这样做首先违反了使用接口的目的。


0
投票

可能您将不得不像下面那样显式地检查并投射它

var data = MethodA();
JsonSerializer.Serialize(data is ClassB ? data as ClassB : data as ClassA ) 
© www.soinside.com 2019 - 2024. All rights reserved.