2009-07-15 2 views
3

Я изучаю C# сейчас и новичок в мире программирования. У меня есть книга под названием «Полная ссылка» Герберта Шильдта. Пока это хорошая книга, и я нахожусь в курсе методов и конструкторов.методы и конструкторы

Я совершенно смущен, какая разница в методах и конструкторах. Потому что в книге у нее почти такой же пример. Я не знаю, как их отличить. Буду признателен за вашу идею. Кстати у меня есть несколько определения здесь как, я просто хотел бы знать, как отличить их

Спасибо за вашу помощь

Приветствие

+2

Я не знаю об этом, но книга Сильдта C++ почти одного и того же названия - это повод для неточности и плохой практики. – 2009-07-15 08:56:18

+1

Я прочитал немало обзоров книг по программированию, и я никогда не видел хороший обзор книги Герберта Шильдта. Его обычно подвергают серьезной критике за то, что он говорит, что это неверно, или плохой совет, или с образцами кода, которые не компилируются или не дают неправильную идею или не поощряют плохую практику. –

+0

Вы говорите, что эта книга не хороша для новичков? Буду признателен за ваши мнения и предложения. Спасибо – tintincutes

ответ

11

Конструктор работает только при создании нового экземпляра класса. Это самый первый метод для запуска экземпляра, он должен запускаться, и он запускается ровно один раз.

Метод экземпляра можно вызвать в любом месте от нуля до бесконечного времени в экземпляре после его создания.

Конструктор запускается неявно. Когда создается новый экземпляр класса, он запускается автоматически. Метод запускается явно. Он должен быть вызван либо из некоторого внешнего источника, либо из метода - или конструктора - в класс.

Конструктор предназначен для проводки. В конструкторе вы хотите избежать реальной работы. Вы в основном готовите класс, который будет использоваться. Метод предназначен для выполнения фактической работы.

public class MyType 
{ 
    private SomeType _myNeeds; 

    // constructor 
    MyType(SomeType iWillNeedThis) 
    { 
     _myNeeds = iWillNeedThis; 
    } 

    // method 
    public void MyMethod() 
    { 
     DoSomethingAbout(_myNeeds); 
    } 
} 
+0

Привет, Серхат, когда вы говорите «неявно», что это значит? а также явно. Я знаю значение неявного и явного, но я не понимаю использования в C#. спасибо – tintincutes

+0

Когда вы создаете экземпляр с новым, конструктор автоматически запускается. Когда вы хотите вызвать метод, вы ясно укажете экземпляру для запуска этого метода. –

+0

Отличный ответ Серхат. –

12

Конструктор представляет собой метод .. специальный метод, который призывается к «строительству» класса.

Определение: Конструктор является функцией класса член в C++ и C#, который имеет такое же имя, как и сам класс.

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

От About.com

+0

спасибо Крису за хорошее объяснение :-) – tintincutes

+0

Отличное объяснение. – Vippy

5

Конструктор представляет собой метод экземпляра с особым смыслом - в частности, он называется внутренне при создании экземпляра соответствующего класса с новой. Это ключевое различие.

Другие незначительные отличия заключаются в том, что конструктор должен иметь то же имя, что и класс, к которому он принадлежит, и он не может иметь никакого возвращаемого значения, даже недействительным.

+0

Именно поэтому конструктор не имеет объявленного с ним типа (т. Е. Int, string и т. Д.)? Потому что он не возвращает значение? Так что было бы безопасно сказать, что вы можете отличить их, потому что метод всегда будет иметь тип, объявленный с ним, а конструктор не будет? IE: --constructor -> public const() {} и --method -> public int func() {} Это правильное мышление? – Vippy

+0

@Vippy: Я так думаю. Просто нет значимого типа, который может быть объявлен как возвращаемый конструктором. – sharptooth

+0

Спасибо, sharptooth! Еще один быстрый вопрос, являются ли конструкторы обязательным объектом для класса, IE: являются ли конструкторы необязательными? – Vippy

0

С точки зрения того, как они действуют на объекте, они ведут себя аналогичным образом. Конструктор - это метод объекта, но это особый метод.

Что делает его особенным, так оно вызвано извне. Конструктор называется частью процесса создания объекта. Нормальные методы вызываются явно на объект (после его создания).

3

Имя метода конструктора имеет то же имя, что и класс. Кроме того, он не имеет типа возврата. Или, если вы это сделаете, сам метод конструктора не имеет имени, но тип возврата - тип класса.

public class Foo 
{ 
    // Constructor 
    public Foo() 
    { } 

    public void Bar() 
    { } 
} 
+0

Является ли «Бар» конструктором также или методом? – Vippy

+0

@Vippy это метод с типом возврата 'void'. –

+0

Спасибо, void означает, что он не возвращает никакого значения, правильно? – Vippy

2

С точки зрения то, что они позволили сделать, конструкторы не отличаются все, что многое из методов. Основной концептуальной разницей между методом и конструктором является его цель.

Конструктор приносит объект в действительное полезное состояние и вызывается только один раз в начале. Метод изменяет объект из одного действительного состояния в другое. (Хорошо, некоторые методы только извлекают информацию, они не обязаны изменять состояние объекта).

Edit: Это происходит со мной, что, в частности, для C#, указанное объяснение может ввести в заблуждение, так как неизменные объекты не совсем необычные идиомы в языке, так много объектов ОП будет сталкиваться не будет имеют переменное состояние. Сложные концепции часто имеют однострочные объяснения, которые просты, элегантны и неправильны.

+0

благодарит Michiel за ваше объяснение. Извините, если я не понимаю, что означает OP? Я не очень хорош, когда дело доходит до коротких сокращений ;-) спасибо – tintincutes

+0

Оригинальный плакат, т. Е. Вы. –

0

класс инварианты
класс отвечает за сохранение инвариантов - это: класс делает гарантии для абонентов, таких как «object.weight никогда не отрицателен», «нет дубликатов в списке имена " и т. д.

Метод манипулирует существующим объектом, поэтому он может полагаться на инварианты класса, гарантируемые при входе метода. Метод должен убедиться, что он преобразует действительное состояние в другое действительное состояние.

Конструктор вытягивает объект из воздуха, поэтому создает инварианты.

объект
Существование Когда конструктор выбрасывает исключение, то предполагается, что объект никогда не существовало. Таким образом, например, финализатор никогда не запустится. Последствия сравнительно слабы в C#, они более заметны на языках с детерминированным разрушением, например C++.

3

Обратите внимание, что материал конструктора является методом. это означает, что конструктор - это особый тип метода, его имя точно такое же, как класс, но не имеет выходного параметра. Конструктор вызывается во время создания объекта из класса.

Public class person() 
    { 
    public person() 
    { 
    } 
    } 
3

Конструктор будет автоматически вызываться при создании объекта, тогда как метод должен быть вызван явно. Конструктор должен иметь то же имя, что и у класса, тогда как функции не обязательно должны быть одинаковыми. Нет типа возврата, указанного в сигнатуре конструктора (заголовок). Он аналогичен классу . В тексте конструктора нет оператора return.

Пример:

class Widget //Some Class "Widget" 
{ 
    int _size; 
    int _length; 
// Declaring a Constructor, observe the Return type is not required 

public Widget(int length) 
    { 
     this._length = length; 
    } 
// Declaring a Method, Return type is Mandator 

    public void SomeMethod(int size) 
    { 
     this._size = size; 
    } 
} 

//Calling the Constructor and Method 

class Program 
{ 
    static void Main() 
    { 

//Calling the Constructor, Observe that it can be called at the time the Object is created 
     Widget newObject = new Widget(124); 

//Calling the Method, Observe that the Method needs to be called from the New Object which has been created. You can not call it the way Constructor is called. 

     newObject.SomeMethod(10);I 

    } 
} 
0

Конструкторы специальные методы, используемые для инициализации членов вашего класса с разными сигнатурами/параметры

0

Конструкторы особый тип методов. Всякий раз, когда в памяти создается новый объект, этот метод вызывается автоматически. Также у конструктора нет никакого типа возврата, тогда как другие методы имеют тип возврата.

0

Конструктор - это специальный метод класса, который инициализирует поле класса. Имя_компьютера - это то же имя, что и имя класса. У него нет типа возврата. Когда экземпляр создается, вызывается конструктор времени. Без памяти конструктора нельзя выделить, если разработчику не удалось определить конструктор, а затем неявный конструктор, вызываемый и инициализирующий поле с фиксированным значением или значением по умолчанию для типа данных.

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