Если вы определяете функцию с подписью bool isItAString(object input)
, это все равно, что вы сообщаете компилятору, что переменная input
может быть экземпляром любого возможного типа .
Подробное объяснение:
. NET экземпляры объекта всегда имеют тип
Во-первых, ни один экземпляр объекта не имеет действительно unknown
типа. Любой экземпляр объекта имеет базовый класс System.Object
, поскольку все экземпляры объекта в. NET являются производными от типа System.Object
.
Если вам нужно знать реальный тип экземпляра объекта, вы можете проверить его с помощью метода .GetType()
, как и в вопросе.
В чем разница между object
и var
?
object
- это псевдоним для System.Object
, что такое. NET type
Вы можете использовать его в качестве базового типа для ваших классов :
public class MyClass : System.Object {}
Но этот код не имеет смысла, потому что все ваши типы уже получены из System.Object
, как я упоминал выше.
var
является синтаксическим сахаром
Он указывает компилятору создать переменную типа, определенного после оператора присваивания (=
). Например:
var str = "Hi, i am string" // Compiler understands that str must be a string.
var i = 25 // Compiler understands, that must be an integer
var f = 25f // f marked as a float. So f will be float.
var result = AnyMethod() // result will be that type which AnyMethod returns
Поэтому, когда у вас есть оператор присваивания (=
), вы можете использовать var
, потому что компилятор может понять, что будет в переменной. Но вы не можете использовать его как параметр метода, потому что компилятор не может понять, что вы пытаетесь разместить здесь. Использование object
в качестве параметра метода говорит компилятору, что он может быть любого типа. Таким образом, вы будете точнее указывать компилятору, что использовать.