Это потому, что аргументы для параметров ref
должны иметь точно того же типа, что и параметр, а не только тот, для которого доступно преобразование.
Вам действительно, действительно нужна часть ref
? Заставить конструктор принять параметр ref
довольно необычно. Вы уверены, что это не просто путаница с механизмами передачи параметров ? Я знаю, что вы сказали, что вы не можете изменить «основные» типы, но вы должны хотя бы взглянуть на их изменение в какой-то момент в будущем, если они действительно не используют эту «ref» функциональность. Если они используют "ref", то имеет смысл, что это недопустимо ... конструктор coreUser
может выглядеть так:
public coreUser(string id, ref coreSecurity cs)
{
coreSecurity = new coreSecurity();
}
Это бы запутало ваш extUser
конструктор, не так ли? es
будет ссылаться на объект, который не был extSecurity
...
(Наряду с похожими «странными» строками - ваши типы действительно верблюжьими? Соглашения .NET предназначены для типов, которые должны быть PascalCased ...)
Если вы можете действительно только изменить конструктор extUser
, то, как говорит Одед, вы можете изменить тип параметра на coreSecurity
- и затем, если вам нужно это как extSecurity
, вы можете
брось это:
public extUser(string id, ref coreSecurity cs) : base(id, ref cs)
{
extSecurity es = (extSecurity) cs;
// Use es here
}
Конечно, это вызовет исключение, если cs
ссылается на объект, который не является extSecurity
к тому времени, когда базовый конструктор вернул ...