Я недавно нашел превосходная статья , которые объясняют энергозависимый как:
Первый, необходимо понять немного что-то о модели памяти Java. Я изо всех сил пытался за годы объяснить его кратко и хорошо. На сегодняшний день лучший способ, которым я могу думать для описания его, состоит в том, если Вы воображаете его этим путем:
Каждый поток в Java происходит в отдельном пространстве памяти (это явно неверно, поэтому терпите меня на этом).
необходимо использовать специальные механизмы, чтобы гарантировать, что коммуникация происходит между этими потоками, как Вы были бы в системе передачи сообщений.
записи Памяти, которые происходят в одном потоке, могут "просочиться через" и быть замечены другим потоком, но это ни в коем случае не гарантируется. Без явной коммуникации Вы не можете гарантировать, какие записи замечены другими потоками, или даже порядком, в котором они замечены.
Java энергозависимый модификатор является примером специального механизма, чтобы гарантировать, что коммуникация происходит между потоками. Когда один поток пишет в энергозависимую переменную, и другой поток видит, что запись, первый поток говорит, что второе обо всем содержании памяти вплоть до него выполнило запись к той энергозависимой переменной.
Дополнительные ссылки: http://jeremymanson.blogspot.com/2008/11/what-volatile-means-in-java.html http://www.javaperformancetuning.com/news/qotm030.shtml
static void DoWork()
{
var myclass = typeof(MyClass);
var pi = myclass.GetProperty("Enum");
var type = pi.PropertyType;
/* as itowlson points out you could just do ...
var isMyEnum = type == typeof(MyEnum)
... becasue Enums can not be inherited
*/
var isMyEnum = type.IsAssignableFrom(typeof(MyEnum)); // true
}
public enum MyEnum { A, B, C, D }
public class MyClass
{
public MyEnum Enum { get; set; }
}
In your above code,
bool isEnum = typeof(Enum).IsAssignableFrom(typeof(genericType));
will get you whether or not the current type is (derived from) an enum or not.