MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как заполнить статический Dictionary делегатами на нестатические методы?"
Answer 1015378
Никак. Делегат - это объект, который указывает либо на статический метод, либо на метод экземпляра и конкретный объект, у которого он будет вызываться. Создать делегат, указывающий на метод экземпляра, без указания конкретного объекта нельзя. Возможно, вместо делегата вы имели в виду MethodInfo, который как раз указывает на метод без привязки к конкретному экземпляру, и позволяет перейти к делегату с помощью метода CreateDelegate:
using System; using System.IO; using System.Collections.Generic; using System.Reflection; namespace ConsoleApplication1 { struct MyStruct { int a; public void ReadA(Stream s) { a = s.ReadByte(); } int b; public void ReadB(Stream s) { b = s.ReadByte(); } public delegate void ReadDelegate(Stream stream); static Dictionary<uint, MethodInfo> readmethods = new Dictionary<uint, MethodInfo>(); static MyStruct() { readmethods[0] = typeof(MyStruct).GetMethod("ReadA"); readmethods[1] = typeof(MyStruct).GetMethod("ReadB"); } public Dictionary<uint, ReadDelegate> GetReadDelegates() { var delegates = new Dictionary<uint, ReadDelegate>(); foreach (uint key in readmethods.Keys) { delegates[key] = (ReadDelegate)readmethods[key].CreateDelegate(typeof(ReadDelegate), this); } return delegates; } } }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.