C#. Написать функцию
Написать функцию, которая принимает строку, заменяет в ней все вхождения символа ‘a’ на ‘A’ и возвращает число заменённых символов.
Объявить указатель на полученную функцию и вызвать её с помощью указателя.
Написать функцию, которая принимает строку, заменяет в ней все вхождения символа ‘a’ на ‘A’ и возвращает число заменённых символов.
Объявить указатель на полученную функцию и вызвать её с помощью указателя.
// http://msdn.microsoft.com/ru-ru/library/ct597kb0.aspx
using System;
using System.Collections;
using System.Runtime.InteropServices;
namespace example
{
class Program
{
delegate int MyDelegate(ref string str);
static int Labuda(ref string str)
{
str = str.Replace('а', 'А');
IEnumerator enm = str.GetEnumerator();
int count = 0;
while (enm.MoveNext()) if ((char)enm.Current == 'А') ++count;
return count;
}
unsafe static void Main(string[] args)
{
string s = "мама мыла раму, папа жрал агаву";
Console.WriteLine(s);
var fn = new MyDelegate(Labuda);
IntPtr pointer = Marshal.GetFunctionPointerForDelegate(fn);
void * ptr = pointer.ToPointer();
var p = (MyDelegate)Marshal.GetDelegateForFunctionPointer((IntPtr)ptr, typeof(MyDelegate));
var result = p(ref s);
Console.WriteLine(s);
Console.WriteLine(result);
Console.ReadKey();
}
}
}