دسترسی Delegate به متد خصوصی کلاس دیگر در سی شارپ
با سلام
دوستان یک سوال:
در این سه کلاس که نوشتم در کلاس Program ما باید تکلیف Event رو روشن کنیم که به کجا Add شود یعنی موقع اجرا بلاخره به کدام متد اشاره کند که یک متد از نوع دسترسی private نوشته شده و بهش اضافه شده.
حال سوال اینجاست . در کلاس Worker در نهایت موقع اجرا متغیر del به متد Worker_WorkPerformed موجود در کلاس دیگر که Program هست و دسترسی private داره اشاره میکنه.
چطور؟ یعنی متغیر و اعضای حصوصی فقط توسط همان اعضا و متغیر های کلاس قابل دسترسی هستند. ایجا چطور از کلاس Worker به متدی از کلاس Program اشاره دارد.
با تشکر
کد:
using System;
namespace DelegatesAndEvents
{
public class WorkPerformedEventsArgs : EventArgs
{
public WorkPerformedEventsArgs(int hours , WorkType workType)
{
Hours = hours;
WorkType = workType;
}
public int Hours { get; set; }
public WorkType WorkType { set; get; }
}
}
کد:
using System;
namespace DelegatesAndEvents
{
//public delegate int WorkdPerformedHandler(object o , WorkPerformedEventsArgs e);
public class Worker
{
public event EventHandler<WorkPerformedEventsArgs> WorkPerformed;
public event EventHandler WorkCompleted;
public void DoWork(int hours , WorkType workType)
{
for (int i = 0; i < hours; i++)
{
OnWorkPerfomed(i + 1, WorkType.Coffee);
}
OnWorkCompleted();
}
protected virtual void OnWorkPerfomed(int hours , WorkType workType)
{
var del = WorkPerformed as EventHandler<WorkPerformedEventsArgs>;
if (del != null)
{
del(this, new WorkPerformedEventsArgs(hours,workType));
}
}
protected virtual void OnWorkCompleted()
{
var del = WorkCompleted as EventHandler;
if (del != null)
{
del(this, EventArgs.Empty);
}
}
}
}
کد:
using System;
namespace DelegatesAndEvents
{
public enum WorkType
{
GoToMeeting,
Coffee,
Break
}
class Program
{
static void Main(string[] args)
{
Worker worker = new Worker();
worker.WorkPerformed += Worker_WorkPerformed;
worker.DoWork(10, WorkType.GoToMeeting);
}
private static void Worker_WorkPerformed(object sender, WorkPerformedEventsArgs e)
{
Console.WriteLine($"Hour is {e.Hours} - WOrk Type is {e.WorkType}");
}
}
}