2009-07-13 4 views
3

Хорошо, у меня есть этот прототип, написанный кем-то еще на C#, и я пытаюсь поместить его в Objective-C. Теперь у меня еще не было формального опыта работы с C#, поэтому я пока не знаю все об этом. Я понимаю, что такое первые три переменные, но у меня возникают проблемы с тем, что делают четвертая и пятая строки (c_data). Является ли четвертое объявление методом, а затем пятым, определяющим его или что происходит? Спасибо за вашу помощь!Помогите с пониманием кода C# и портирования на Objective-C

public class c_data { 
    public double value; 
    public int label; 
    public int ID; 
    public c_data() { } 
    public c_data(double val) { 
     value = val; 
    } 
} 
+1

Это какой-то могучий грустный выглядящий код C# там. Надеюсь, вам лучше с именами и форматированием, когда вы его преобразуете. –

+0

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

+0

Я согласен, и это, вероятно, пример из учебника. Вот почему так много книг по программированию ужасны. Если вы не сделали бы этого в реальном коде, тогда не научите кого-то, как это сделать в поддельном коде, потому что через 5 лет у вас будет куча кода, который выглядит как ваши примеры ... Я говорю с вами Microsoft и myStupidPrefix. – 2009-07-13 18:11:08

ответ

16

Четвертая и пятая строки являются конструкторами в C#. Они эквивалентны целям [[c_data alloc] init] в объекте-c. C# позволяет перегружать конструкторы на основе параметров, которые они принимают. Это эквивалентно тому, что два различных способа инициализации в Objective-C:

@interface CData : NSObject 
{ 
    double value; 
    int label; 
    int ID; 
} 

@property double value; 
@property int label; 
@property int ID; 

-(id) init; 
-(id) initWithValue:(double)value; 

@end 
+0

Большое спасибо ... Я бы пошатнулся вокруг этого еще на час, если бы не ты. –

+0

(Изменены типы возврата init на «id» и объявлены для расширения NSObject.) –

+0

Хороший ответ, особенно с точки зрения позиционирования Objective-C.Также рекомендуется соблюдать правила именования языка назначения (например, «CData» вместо «c_data» для имени класса) при портировании. –

2

4-я строка - это конструктор без параметров, а 5-я строка - конструктор параметров.

1

4-й и 5-й являются конструкторами, которые используются для инициализации экземпляра c_data при новом обновлении.

1

Четвертый определяет конструктор класса, который не принимает никаких параметров и не имеет никаких действий, а пятый определяет конструктор для класса, который принимает в качестве параметра двоичное значение и который устанавливает значение переменной члена класса к переданному значению val.

1

4-я и 5-я линии - оба конструктора.

4-я строка - это конструктор по умолчанию, который в этом случае не инициализирует какие-либо переменные.

Конструктор на 5-й линии устанавливает переменную с именем значение параметра передается в

2

Первый c_data не является значением по умолчанию нет-арг конструктор, который инициализирует поля структуры значений по умолчанию (значение -.> 0.0, этикетка -> 0, ID -> 0), а второй c_data - это конструктор, который устанавливает поле значения экземпляра в параметр переданного значения val, а остальные поля - значениям по умолчанию. Я описал, как эти два вызова конструктора инициализируют экземпляр.

0

Если можно, это скорее как имеющие обе следующие методы в классе Objective-C:

  • (ид)в этом;
  • (id) initWithNumber: (номер NSNumber *);

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

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