Вы хотите StructLayoutAttribute
[StructLayout(LayoutKind.Explicit, Size=1, CharSet=CharSet.Ansi)]
public struct Foo
{ [FieldOffset(0)]public byte original_or_copy;
[FieldOffset(0)]public byte copyright;
[FieldOffset(0)]public byte data_alignment_indicator;
[FieldOffset(0)]public byte PES_priority;
[FieldOffset(0)]public byte PES_scrambling_control;
[FieldOffset(0)]public byte reserved;
}
Это действительно объединение, но вы можете использовать его как битовое поле - вам просто нужно знать, где в байте бит для каждого поля. Полезные функции и / или константы для AND могут помочь.
const byte _original_or_copy = 1;
const byte _copyright = 2;
//bool ooo = foo.original_or_copy();
static bool original_or_copy(this Foo foo)
{ return (foo.original_or_copy & _original_or_copy) == original_or_copy;
}
Существует также LayoutKind.Sequential, который позволит вам сделать это способом C.
Можно использовать отражение. Принятие текущего объекта содержит SomeMethod()
метод, код, чтобы сделать так был бы похож на это:
GetType().GetMethod("SomeMethod").
MakeGenericMethod(new Type[] { someType }).Invoke(this, null);
Примечание, что, если SomeMethod()
является непубличным, Ваш код не может выполниться в более низко-доверительных средах.
Единственный способ сделать это сегодня через отражение. См. MethodInfo. MakeGenericMethod (Тип []) .
, Почему не делает C#, позволяют, чтобы это было легальным оператором?
, Поскольку другие отметили, Вы не можете сделать этого. Почему нет? Ну, рассмотрите свой пример:
foreach(Type someType in listOfTypes)
{
SomeMethod<someType>();
}
Уведомление, что каждый тип в списке типов не может быть известен до время выполнения , тогда как параметр типа SomeMethod
должен быть известен в время компиляции . Для компилятора невозможно сказать , к которому SomeMethod<T>
для разрешения вызова, таким образом, это недопустимо.
В C# 4, это и много других подобных вещей будут возможны с включением ДОЛЛАРА в CLR. В частности, динамический вызов метода позволит Вам вызвать методы, которые не могут быть известны во время компиляции.