Здравствуйте. Если есть 2 класса class A
и class B:A{}
и создать объект класса B, но ссылку дать на A, т.е A obj = new B()
писав obj.GetType()
можно получить тип объекта. А есть ли такая функция чтобы вернула не тип объекта, а ссылку, т.е A ?
Если я правильно понял вопрос, то автор хочет узнавать тот тип, с которым объявлена переменная.
Оператор typeof()
, к сожалению работает только с идентификаторами типов. К переменным он неприменим.
Однако, можно извратиться, создав обобщённую (generic) функцию для вызова с автоматическим выводом generic-аргумента.
Вот пример:
using System;
class Solution
{
static Type VariableType<T>(ref T var_value)
{
return typeof(T);
}
class A { }
class B : A { }
static void Main(string[] args)
{
A obj_A = new A();
B obj_B = new B();
A obj_X = new B();
Console.WriteLine("VariableType(obj_A) = {0}", VariableType(ref obj_A).Name);
Console.WriteLine("VariableType(obj_B) = {0}", VariableType(ref obj_B).Name);
Console.WriteLine("VariableType(obj_X) = {0}", VariableType(ref obj_X).Name);
}
}
Выводом будет:
VariableType(obj_A) = A
VariableType(obj_B) = B
VariableType(obj_X) = A
P.S.:
Ключевое слово ref
в объявлении функции использовать необязательно.
Я это сделал только для того, чтобы нельзя было подсунуть выражение вместо переменной.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть метод Download(url, file), в конструкторе класса создан объект Webclinet web = new Webclient(); в методе происходит загрузка файла
Каким образом можно обработать сразу два исключения? (ArgumentOutOfRangeException и FormatException)
Подскажите, как можно строить фигуры по данным из базы данных (может быть есть примеры)? Например прямоугольники, треугольники и тд
Есть 10 кнопоктак же есть метод PlayNumber(int i), который цепляется на OnClick с индексом i, который в свою очередь при нажатии на кнопку с этим индексом,...