Делает кастинг Объекта в C#, всегда возвращают Ссылку на начальный объект

Вы также можете получить более простую для понимания картину того, где теги указывают на использование

git log --graph |git name-rev --stdin --tags |less

, а затем прокрутить до нужного тега с помощью /.

Более компактный вид (--pretty=oneline) плюс все головки (-a) также могут помочь:

git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less

Выглядит немного пугающе, но в случае необходимости может также иметь псевдоним в ~/.gitconfig.

~/.gitconfig

[alias]
ls-tags = !git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less
10
задан Arnon Zilca 11 October 2015 в 09:25
поделиться

2 ответа

Для справочных типов. если приведение идет вверх или вниз по иерархии наследования, тогда да. Это эталонное преобразование . Из спецификации языка C # 3.0, раздел 6.2.4:

Ссылочные преобразования, неявные или явный, никогда не меняйте ссылочный идентичность объекта преобразован. Другими словами, пока преобразование ссылки может изменить тип ссылки, никогда изменяет тип или значение объект, на который ссылаются.

Это тот случай, который вы используете в вашем коде WinForms.

Однако в других случаях (все еще ссылочного типа) он может вызвать определяемое пользователем преобразование . Например:

using System;

class Foo
{
}

class Bar
{
    public static explicit operator Bar(Foo f)
    {
        return new Bar();
    }
}

class Test
{
    static void Main()
    {
        Foo f = new Foo();
        Bar b = (Bar) f;
        Console.WriteLine(object.ReferenceEquals(f, b)); // Prints False
    }
}

Пользовательские преобразования, подобные этому, относительно редки.

Для типов значений существуют преобразования упаковки и распаковки, а также другие преобразования (например, между int и двойной ).

17
ответ дан 3 December 2019 в 15:22
поделиться

Для ссылочных типов , переданных через иерархию наследования, он всегда будет ссылаться на один и тот же экземпляр. Однако для типов значений приведение может включать упаковку и распаковку, которые будут копировать данные. Помимо этого, приведение типов выполняется не только в иерархии наследования. Вы можете объявить собственный оператор приведения, имеющий характеристики метода. Он может вернуть любой объект, который ему нравится.

12
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: