如何返回包含指定成员变量的未知对象

时间:2015-02-19 01:37:36

标签: c#

我看到过一些代码,返回的对象有一个Visible成员,可以设置为true。我想模仿这个功能,但我收到错误' object'不包含'可见'的定义并且没有扩展方法'可见'接受类型'对象'的第一个参数。可以找到。

以下是有效的示例代码:

public AP.GlobalClass APObj = new AP.GlobalClass();
APObj.Application().Visible = true;

以下是我正在努力做的事情:

public APControl.A2APGlobalClass APObj_B = new APControl.A2APGlobalClass();
APObj_B.Application().Visible = true; //Error goes with this line

public class A2APGlobalClass
    {
       public AP.GlobalClass APObj = new AP.GlobalClass();

       public Object Application() //Do I need to change "Object" to something else?
       {
           return APObj.Application(); //This returned object "Object" type does no longer contain the Visible member.
       }

1 个答案:

答案 0 :(得分:1)

代码可能是封闭源代码,但程序集公开的类型的公共成员必须是可见的。如果您在任何类型的体面环境中工作,当您将鼠标悬停在该成员上时,智能感知将告诉您返回类型。如果您的编辑器没有智能感知,则还有其他方法可以提取此信息。

参考@JeroenVannevel的评论,您可能想要了解静态与动态类型。 C#是一种静态类型语言,因此您无法在类型Object的引用上调用Visible属性,因为Object没有Visible属性。您需要返回以下内容之一而不是Object:

  • 要返回的对象的实际类型
  • 声明Visible属性的类
  • 属于继承链中两个先前提到的类型之间的类型(如果有任何此类类型)
  • 由返回的对象实现的接口类型(如果有),它定义了Visible属性

例如,对于下面定义的类型,您可以返回除A:

之外的任何类型
interface I { bool Visible { get; set; } }
class A { }
class B : I { public bool Visible { get; set; } }
class C : B { }
class D : C { }