【问题标题】:Not able to create an object of both the class why in c#?为什么在 c# 中无法创建两个类的对象?
【发布时间】:2016-09-24 01:20:22
【问题描述】:

我创建了两个类,即 A 和 B 这是下面给出的代码

class Program
{
    public class A
    {
        public int add(int x, int y)
        {
            return x + y;
        }
    }

    public class B:A
    {
        public int sub(int x, int y)
        {
            return x - y;
        }
    }

    static void Main(string[] args)
    {
        A t = new A();
        t.add(10,20);
        B r = new B();
        r.sub(20, 10);
        A B
    }
}

B 类继承自 A 类但是当我想创建一个对象时

A B = new AB();

AB 类都不能创建对象。这背后的原因是什么?

【问题讨论】:

  • 如果想创建A类型的类,那么你应该使用A B = new A()而不是new AB()
  • 阅读一些 c# 和 oops 概念的基础知识

标签: c# class oop


【解决方案1】:

通过使用inherit 这意味着你正在添加一个基类......所以当你创建B时你说继承A......这意味着你在B中的方法(即.sub)是可用的,而且所有的方法在A(即 .add)。

所以要做一个 AB,你所要做的就是使用 B...因为它包含这两个,如 B b = new B(); 所定义的那样

再加上你对这些名字的混淆; A 应该是 AddValues,B 应该是 AddandSubtractValues,因此可以清楚地记录您的代码...稍后会对您有所帮助

【讨论】:

    【解决方案2】:

    B = new B(); 就够了。

    名称应该与您定义类名的方式完全相同。名称没有组合。在您的情况下,类 B 继承自类 A 并将包含类 A 的所有功能。

    例如:

    B b = new B();
    
    int sum = b.add(10, 30);
    int difference = b.sub(10, 30);
    

    【讨论】:

      【解决方案3】:

      请阅读一些 c# 语言语法基础知识和C# Programming/Inheritance 文章。

      【讨论】:

        【解决方案4】:

        您的代码已经显示您创建了一个new A() 和一个new B()没有AB()。根据继承的性质,B 已经A每个 B 也是一个 A - 只是一个更具体的子类型。

        A B = new AB();
        

        说“将B 声明为A 类型的新变量,并将引用分配给AB 的新实例”。如果您创建class AB : A,这实际上甚至可以编译。不过,这可能不是您的本意。

        【讨论】:

          【解决方案5】:

          很遗憾,没有班级AB

          如果要创建A 类型的类,则应该使用A B = new A(); 而不是A B = new AB();

          另外,由于B 是从A 派生的,如果您创建B,您可以从类B 的实例中访问所有protected/public 属性、字段和方法:

          B b = new B();
          b.add(); //this is B but use class A method, it is OK
          

          所以,你可以只创建类B的对象实例

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-22
            • 1970-01-01
            • 2015-02-13
            • 1970-01-01
            • 2017-03-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多