2016-05-26 2 views
-6

я создал два класса именно & B Вот код, указанный нижеНе удалось создать объект класса, почему в C#?

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 B = new AB(); 

обоих классовую AB, то он не может создать объект. В чем причина этого?

+1

Если вы хотите создать класс типа 'A', то вы должны сделать' A B = new A() 'вместо' new AB() ' – Ian

+0

прочитать некоторые основы C# и oops comcepts – DDave

ответ

1

Ваш код уже показывает вам сделать new A() и new B(). Там является no AB(). По характеру наследования, Bуже a A; каждыйB также является A - более конкретным подтипом.

A B = new AB(); 

говорит «объявить B быть новой переменной типа A и присвоить ему ссылку на новый экземпляр AB». Это было бы даже скомпилировано, если вы создадите class AB : A. Скорее всего, это не то, что вы хотели сделать.

1

B = new B(); достаточно.

Имя должно быть точно таким, как вы определили имя класса. Имена не составлены. В вашем случае класс B наследуется от класса A и будет содержать всю функциональность класса A.

Например:

B b = new B(); 

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

К сожалению, нет класса AB

Если хотите создать класс типа A, то вы должны сделать A B = new A(); вместо A B = new AB();

Кроме того, поскольку B является полученный от A, если вы создаете B, вы можете получить доступ ко всем свойствам, полям и методам protected/public от t он экземпляр класса B:

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

Таким образом, вы можете просто создать объект экземпляра класса B

0

Использование наследования означает, что вы добавляете в базовый класс ..... поэтому, когда вы создали B, вы сказали, наследуете A ... это означает, что ваши методы в B (то есть .sub) доступны, но также и все методы в A (т.е. .add).

Итак, чтобы сделать AB, все, что вам нужно сделать, это использовать B ..., поскольку в них есть оба из них, как определено B b = new B();

Плюс ваше смущение себя этими именами; A должен быть AddValues, B должен быть AddandSubtractValues, тем самым четко документируя ваш код ...он поможет вам позже

Смежные вопросы