2015-12-21 3 views
-3
Class ObjName = new Class(); 


Этот вопрос связан с тем, что я опрокинулся определение следующим образом:Что говорит объявление типа класса C#?

public class Thing{ 
// Stuff 
} 
public class Animal:Thing{ 
// Stuff 
} 

Вслед за этой декларацией Thing x = new Animal();

Похожие вопросы: Как это первая определение класса/тип, связанное со вторым (после нового ключевого слова)?

Link to the related article, by: Matthew Cochran

+2

Второй пример - это определение. сначала это декларация. Они разные, и вы должны прочитать, чтобы понять разницу. – DrewJordan

+1

Если я понимаю вопрос: класс Animal наследуется от Thing, поэтому для объекта Thing x можно назначить новый объект Animal(). –

+0

@ Андреас Джоханссон, дорогой Андреас, в Google есть тысячи ресурсов, описывающих классы и как их объявлять. Кроме того, на YouTube есть сотни видеоуроков, в которых люди обходят основы объектно-ориентированного программирования. Удачи! – Alex

ответ

1

Это Class ObjName = new Class(); создает объект типа Class вызывающего конструктор по умолчанию и присваивает ссылку, указывающую на этот объект переменной .

Кроме того, этот Thing x = new Animal(); выполняет то же самое (он создает объект и присваивает ссылку на этот объект переменной). Однако здесь есть небольшое различие. Объект Animal является объектом Thing. Другими словами, Animal наследует Thing. Поэтому ссылку на объект Animal можно присвоить переменной, тип которой Thing.

Here - прекрасная ссылка для наследования.

+0

Итак, что происходит на самом деле, это объявление как: Animal x = new Animal() ;? Просто, что тип x - это один из базовых элементов ...... Что также класс Animal отключен ?? :/ –

+0

@AndreasJohansson Исправить. Там происходят две вещи, упомянутые выше. Сначала создается объект, а вторая ссылка на этот объект присваивается переменной 'x'. Ничего меньше, больше ничего. – Christos

2

Если я угадал ваш смысл правильно ...

public class Thing{ 
} 
public class Animal:Thing{ 
} 

Это говорит класс Animal производный от класса Thing. (Animal: Thing). Так что если вы заполнили его немного больше ...

public class Thing{ 
    void DoStuff() 
    { 
    Console.Write("Doing Stuff"); 
    } 
} 
public class Animal:Thing{ 

} 

вы можете сделать что-то вроде этого ...

var ani = new Animal(); 
ani.DoStuff(); 

Из Inheritance

EDIT: Для вашего удобства в терминах поскольку они могут быть достаточно сложными для начинающих (и экспертов), это будет определение класса

public class Thing 
{ 
    void DoStuff() 
    { 
    Console.Write("Doing Stuff"); 
    } 
} 

Это было бы объявление переменной (это не так часто сегодня, как это было несколько лет назад, по крайней мере, в C# и родственных языков)

Thing x; 

Это объявление переменной и задания - также называется «конкретизация», как мы создаем экземпляр определения класса. Использование var здесь - яркий ярлык, и вы должны использовать его больше, чем указывать тип с левой стороны, если нет веских оснований для этого.

var x = new Animal(); 
var y = new Thing(); 
+0

Да, наследование одного определения я понимаю. Теперь ссылка на базовый класс, а затем сделать экземпляр подкласса была чем-то новым, о котором я не могу рассказать или найти информацию! –

+0

C# не поддерживает множественное наследование, поэтому единственный класс может наследовать один класс. Однако они могут быть соединены вместе DerivedTwo: DerivedOne, DerivedOne: Base. Тогда все, что доступно в DerivedOne и Base, доступно для DerivedTwo. – StingyJack

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