c# - как получить ссылку объекта

355
22 января 2018, 05:13

Здравствуйте. Если есть 2 класса class A и class B:A{} и создать объект класса B, но ссылку дать на A, т.е A obj = new B() писав obj.GetType() можно получить тип объекта. А есть ли такая функция чтобы вернула не тип объекта, а ссылку, т.е A ?

Answer 1

Если я правильно понял вопрос, то автор хочет узнавать тот тип, с которым объявлена переменная.
Оператор 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 в объявлении функции использовать необязательно.
Я это сделал только для того, чтобы нельзя было подсунуть выражение вместо переменной.

READ ALSO
DownloadFileAsync &ldquo;замораживает&rdquo; форму

DownloadFileAsync “замораживает” форму

Есть метод Download(url, file), в конструкторе класса создан объект Webclinet web = new Webclient(); в методе происходит загрузка файла

254
Обработка исключений С#

Обработка исключений С#

Каким образом можно обработать сразу два исключения? (ArgumentOutOfRangeException и FormatException)

494
Построение фигур по данным из бд - C# [требует правки]

Построение фигур по данным из бд - C# [требует правки]

Подскажите, как можно строить фигуры по данным из базы данных (может быть есть примеры)? Например прямоугольники, треугольники и тд

315
Мини логика игры Unity

Мини логика игры Unity

Есть 10 кнопоктак же есть метод PlayNumber(int i), который цепляется на OnClick с индексом i, который в свою очередь при нажатии на кнопку с этим индексом,...

201