Если ваша структура ОО спроектирована правильно, вам действительно не нужно знать - все, что вы хотите сделать с объектом, может быть сделано с использованием соответствующей реализации, независимо от того, какой это тип.
С учетом сказанного вы можете получить тип любого объекта, вызвав:
Type type = myObject.GetType();
И вы можете сравнить этот тип с другим конкретным типом, например:
if (myObject.GetType() == typeof(Foo))
Оператор is
может доставить вам неприятности, в зависимости от вашего сценария, поскольку это будет верно, если вы проверяете, является ли что-то родительским классом, даже если это действительно дочерний класс. Например:
class Foo {}
class Bar : Foo {}
if (myObject is Foo)
Этот if
вернет true для Foo
или Bar
объектов.