Да, абсолютно. C99 представил VLA или переменную длину массива. Некоторый простой код будет таким:
#include <stdio.h>
int main (void) {
int arraysize;
printf("How bid do you want your array to be?\n");
scanf("%d",&arraysize);
int ar[arraysize];
return 0;
}
Это невозможно. Я хотел бы видеть «статические интерфейсы» , чтобы справиться с этим, но не ожидайте их в ближайшее время ...
Альтернативы:
T
реализовал интерфейс). Первые два действительно эквивалент. В основном вы бы изменили свой прокси-класс на что-то вроде этого:
public class GenericProxy<T>
where T: ClientBase, new()
{
string _configName;
T _proxy;
Func<string, T> _factory;
public GenericProxy(Func<string, T> factory, string configName)
{
_configName = configName;
_factory = factory;
RefreshProxy();
}
void RefreshProxy() // As an example; suppose we need to do this later too
{
_proxy = _factory(_configName);
}
}
(я предполагаю, что вы захотите создать больше экземпляров позже - иначе вы могли бы также передать экземпляр T в конструктор.)
К сожалению, то, что вы пытаетесь сделать, невозможно.
Как отмечает Джон, для этого нет встроенной поддержки, но, кроме того, вы можете создать типизированный делегат конструктору (быстрее, чем отражение), используя Expression
. Код для этого можно найти в MiscUtil (в MiscUtil.Linq.Extensions.TypeExt
).