2014-09-24 2 views
0

EDITEDИспользование наследования внутри структуры

Благодаря Марк Gravell ответ и на другой, теперь работает:

public class INFO_BASE{ 

}; 

public class INFO_INHE : INFO_BASE {...}; 

class DATA{ 
    //stuff 
    public INFO_BASE info; 
}; 


DATA foo = new DATA(); 
//.......do things.........// 
data.info = new INFO_INHE(); 

я не мог сказать, почему я был сфокусирован с использованием структур вместо классов , вы все правы, извиняюсь, спасибо за вашу помощь.

+2

Зачем использовать struct? Я думаю, что вам нужна полная функциональность OO, которую предоставляют классы –

+5

. Я не уверен, что вы пытаетесь сделать здесь, но ваш код не будет компилироваться. Вы не можете наследовать от структуры, нет такой вещи, как виртуальный конструктор, и вы не можете добавить конструктор без параметров в структуру. –

+0

Вы не можете использовать наследование с 'structs' в C#. Структуры герметизированы и могут реализовывать только интерфейсы. Я не уверен, как вы получили код для компиляции. – InBetween

ответ

0

До здесь все нормально,

Нет, на самом деле это не так. Ничего пока что в порядке.

Однако, я думаю, вы просто хотите классы здесь:

class InfoBase { } 

class InfoInhe : InfoBase { } 

class Data 
{ 
    public InfoBase Info { get;set; } 
} 

затем:

Data foo = new Data(); 
//.......do things.........// 
foo.Info = new InfoInhe(); 

Это очень редко, что вам нужно создать в C# в struct, и в большинстве случаев I см. его в примерах «здесь мой код», он используется ненадлежащим образом.

+0

, так что свободное время, потраченное впустую на структуры и классы, было точкой .... хорошо, я думаю, мне нужен отдых. BIG THANKS – Nak

+0

@MarcGravell Structs обладают интересными свойствами, такими как структурное равенство (когда они не состоят из ссылочных типов) и недействительны. Это делает их хорошими кандидатами на объекты ценности, если вы хотите игнорировать их другие недостатки. Http://blogs.msdn.com/b/lucabol/archive/2007/12/24/creating-an-immutable-value-object- в-с-часть-III-используя-а-структуры.aspx – guillaume31

+0

@ guillaume31 любой тип * может * иметь структурное равенство; что касается непустоты: это редко является одним из самых больших препятствий в реальном коде –

0

Структуры в C# могут реализовывать только интерфейсы.

Structs can also contain constructors, constants, fields, methods, properties, indexers, 
operators, events, and nested types, although if several such members are required, 
you should consider making your type a class instead. 

структуры предназначены для группирования данных вместе, как общее правило, если вам нужны методы/contrsucts, ваши лучшие из с классом. [В соответствии с этим Link структуры запечатаны, они не могут быть унаследованы, поэтому ваш код не будет компилироваться. Вместо этого я бы рекомендовал использовать классы. ]

+1

«Если вам нужны методы», это очень плохой и вводящий в заблуждение совет. независимо от того, нужны ли вам методы, в основном ** совершенно не связаны **, должен ли он быть структурой или классом. Обычно, когда я вижу, что люди говорят это - они исходят из фона C/C++. Что другое. Вещи, которые могут предполагать 'struct', являются пересечением:" представляет * значение *, а не * сущность *, "неизменяемость" и "малое". Ничего особенного в методах. –

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