@Alexveto

Почему нельзя вызывать методы объекта через свойство делегата Target?

Если есть делегат которому присвоили какой-нибудь НЕстатический метод объекта:
SomeClass someObject = new SomeClass();
SomeDelegate someDelegate = someObject.SomeNonStaticMethod;

То такой вывод даст true
Console.WriteLine(someDelegate.Target == someObject);

Тогда почему нельзя делать так?
someObject.SomeMethod();
someDelegate.Target.SomeMethod(); // а вот так почему-то нельзя
  • Вопрос задан
  • 53 просмотра
Решения вопроса 2
freeExec
@freeExec
Участник OpenStreetMap
Приведи Target к его типу SomeClass, и тогда будет можно.
Ответ написан
mindtester
@mindtester Куратор тега C#
учу учиться.. чаще на C#. но бывают и варианты..
можно
using System;

namespace SomeNonStatic
{
    class Program
    {
        delegate void someDelegate();
        static void Main(string[] args)
        {
            var so = new SomeClass();
            someDelegate sd = so.SomeNonStaticMethod;

            Console.WriteLine($"someDelegate.Target == someObject => {sd.Target == so}");

            (sd.Target as SomeClass).SomeMethod(); // а вот так почему-то нельзя
        }
    }

    internal class SomeClass
    {
        internal void SomeNonStaticMethod() => Console.WriteLine("it's SomeNonStaticMethod");
        internal void SomeMethod() => Console.WriteLine("it's SomeMethod");
    }
}
а еще лучше так
using System;

namespace SomeNonStatic
{
    class Program
    {
        delegate void someDelegate();
        static void Main(string[] args)
        {
            var so = new SomeClass();
            someDelegate sd = so.SomeNonStaticMethod;

            Console.WriteLine($"someDelegate.Target == someObject => {sd.Target == so}");

            if(sd.Target.GetType() is SomeClass)
                (sd.Target as SomeClass).SomeMethod(); // а вот так почему-то нельзя
        }
    }

    internal class SomeClass
    {
        internal void SomeNonStaticMethod() => Console.WriteLine("it's SomeNonStaticMethod");
        internal void SomeMethod() => Console.WriteLine("it's SomeMethod");
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
НПК «Катрен» Новосибирск
от 70 000 ₽
it2g Самара
До 100 000 ₽
ФинГрад Москва
от 80 000 до 150 000 ₽
05 июл. 2020, в 00:22
4000 руб./за проект
04 июл. 2020, в 23:47
5000 руб./за проект