c# - Class not inheriting from object? -


i working on method using reflection inspect parameter types of methods. methods iterates through parameterinfo's , doing types of parameters.

i under assumption if typeinfo.isclass true, type class , derives (indirectly) type object (except when type object of course). so, if typeinfo.isclass true, typeinfo.basetype must set.

well assumption wrong! there classes not derive type object. , assumption messed code.

for example:

type type = typeof(int).makebyreftype(); 

type.isclass true , type.basetype null.

if think it, logical. , can prevent code crash checking typeinfo.isbyref.

now question is: there more such 'exotic' types (besided byref-types , type object) class (isclass == true) not have base type (basetype == null)?

before answer: refering types isclass == true! , example type int example. have been type. please no:

  • interfaces
  • structs
  • void

answers far:

  • byref types (t&): descrybed in question.
  • pointer types (t*): found mark gravell.

i isclass misleading here. states:

gets value indicating whether system.type class; is, not value type or interface.

and implemented way: checks whether flags include interface, , whether valuetype.

unfortunately, there more things this. pointers are not managed types. by-ref similar pointer. pointer not objects, although in common use cast de-reference/cast. same applies things direct pointers such int*.

not in .net object :)

var basetype = typeof(int*).basetype; // null bool liesandmorelies = typeof(int*).isclass; // true 

eric lippert covers more here: not derives object - , lists few other examples (open generic types, example).


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -