【问题标题】:How generalize classes and access properties?如何泛化类和访问属性?
【发布时间】:2015-12-06 18:38:27
【问题描述】:

我想概括一个类A 并创建一个类A 的对象,该对象具有类AB 的属性。这是我完成的代码,但我无法访问B 中的属性,只能访问A 类型的属性。怎么做?

请告诉我这个概念叫什么 (A test = new B();)

Class Programe
{
    Main()
    {
        A test = new B();
    }
}

Class A
{
    int aint;
}

Class B:A
{
    int bint;
}

Class test:A
{
    int testint;
}

【问题讨论】:

  • 为什么是A test = new B();?而不是B test = new B();?
  • 那么Class test:A bit 是什么意思?如果ABtest 是类,那么A test = new B(); 没有意义...
  • 如果您发布代码,请确保它可以编译,或者至少清楚为什么它不能编译; Class 但肯定 Clas 不是 c#。
  • 感谢大家的回复,smartdev我需要在a和jeroen中获取b的引用我不知道如何在代码部分制作它所以将它粘贴在html标签中

标签: c# oop


【解决方案1】:

这个概念叫做继承。

A test = new B();
B bReference = test as B;
System.Console.WriteLine(bReference.bint);

使用new B() 创建一个类B 的实例并将对它的引用保存在变量test 中。变量test 是一个可以保存对A 类实例的引用的变量。 BA 的子类,因此您的新实例可以被视为A 的实例,因此可以将其存储在您的变量test 中。
如果您想访问特定于B 的实例成员,则必须将您的引用视为对B 实例的引用。您可以使用as 运算符来做到这一点。

【讨论】:

  • 感谢这工作!但我需要避免引用是否有任何其他方式可以让测试本身获得 b 对象的引用而不用 as b 进行转换
  • 您不能将 test 更改为对 B 实例的引用。但是如果你想保持内联,你可以执行以下操作: ((B)test).bint 或 (test as B).bint
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多