Я хочу, чтобы вызов конструктора допускал только ограниченный диапазон «расширений». Скажем, у меня есть эти 2 класса:Конструктор вызовов с другим значением константы класса
public class Foo
{
public Foo(Extension ext)
{
// do something
}
}
public class Extension
{
public const string TXT = ".txt";
public const string XML = ".xml";
}
Так что, когда другой разработчик захочет использовать Foo
он может сделать это только со значениями из Extension
класса как так:
Foo foo = new Foo(Extension.TXT);
Но при попытке для этого я получаю ошибку IDE, говорящую: "cannot convert from 'string' to '<ProjectName>.Extension'
.
В качестве «обходного» Я мог бы изменить свой Extension
класс что-то вроде этого:
public class Extension
{
public enum File
{
TXT,
XML
}
}
и использовать его как это:
Foo foo = new Foo(Extension.File.TXT);
, который отлично работает, но то, что мне не нравится заключается в том, что вызов на один уровень длиннее (класс -> элемент enum -> вместо класса ->).
Итак, вопросы в том, является ли мое обходное решение действительным, правильным или наилучшим решением?
Удалите Num из класса и сделать его общественности. Вы будете вызывать только перечисление: 'new Foo (File.Txt);'. –