gadfi: если я вас правильно понял, это не решает задачу полностью. Все равно нужно будет каким-то образом подключить скачанные файлы, вот только каким? Можно ли использовать для этой цели AssetManager?
Тем не менее. заранее в alternate resources все включить не представляется возможным, так как возможно потом понадобится добавить поддержку очередного языка
Alejandro: как эти языковые файлы именуются у андроида? На stackoverflow нашел совет использовать APK expansion files: stackoverflow.com/questions/15164559/dynamic-andro...
или отказаться от стандартных средств андроида по работе с ресурсными строками и использовать какой-нибудь текстовый файл, который можно скачать, считать и проинициализировать какой-нибудь словарь (key: stringTag, value: text)
Переводом занимается специально подразделение заказчика, так что думаю, таких случаев не будет. Расскажите пожалуйста подробнее, как можно реализовать такую поддержку?
Дело в том, что после локализации появилась вероятность того, что string.format выкинет исключение (ресурсных строк тьма, а переводчики тоже люди). Поэтому возникла необходимость перестраховаться во время вызова этого метода, но поскольку он вызывается в общей сложности несколько сотен раз, то менять его вызов на вызов другого не очень радужная перспектива.
Тип получил, но при попытке получить ссылку на метод:
Type t = typeof(StorageManager);
var m = t.GetMathod("GetVolumeList");
получаю null.
Ссылка на сборку есть в проекте.
Мне нужно сделать так, чтобы была возможность вызвать скрытый метод getVilumeList. С reflection до этого ни разу не сталкивался, поэтому не могу ответить на ваш вопрос
проверки нет, но проблема не может быть в отсутствии проверки - при ее наличии разве конструктор будет инициализировать экземпляр как нужно? Просто в дебаггере отчетливо видно, что экземпляр - null.
Sergey Mozhaykin:
примерно так:
void Main()
{
var b = new B();
}
abstract class A
{
public A()
{
Initialize();
}
protected class InitialValues
{
public string Description { get; set; }
}
private InitialValues initialValues;
protected virtual void Initialize()
{
initialValues = new InitialValues(); // here initialValues is null
initialValues.Description = "A Description";
}
}
class B : A
{
protected class InitialValues : A.InitialValues
{
public string Description1 { get; set; }
}
private InitialValues initialValues;
protected override void Initialize()
{
base.Initialize();
initialValues = new InitialValues(); // and here initialValues is null again
initialValues.Description = "B Description";
initialValues.Description1 = "B Description1";
}
}
забыл добавить, в переопределенном Initialize InitialValues унаследован от приведенного выше класса, base - это родительский класс для того, из которого вызывается переопределенный Initialize, и уже в родительском классе есть класс, описанный ближе к началу поста и метод Initialize, в котором и происходит катавасия.