Я пытаюсь использовать метод внутри другого метода, который относится к разделу Main.Все хорошо, но когда я пытаюсь сделать это динамическим методом, я не могу добраться до метода.но со статикой это нормально.
class Program
{
static void Main(string[] args)
{
Car c1 = new Car("Person1", 120, 10);
//string message = OnCarEngineEvent
c1.RegisterWithCarEngine(new Car.CarEngineHandler(OnCarEngineEvent)); // here I cannot reach the method OnCarEngineEvent
//c1.RegisterWithCarEngine(new Car.CarEngineHandler(OnCarEngineEvent)); we can use this instead of Car.CarEngineHandler handler1
for (int i = 0; i < 10; i++)
{
c1.Accelerate(10);
}
Console.ReadLine();
}
public void OnCarEngineEvent(string msg)
{
Console.WriteLine("Message from Car Object");
Console.WriteLine("=> {0}", msg);
Console.WriteLine("*************************");
}
}
class Car
{
public int MaxSp { get; set; }
public int CurrSp { get; set; }
public string PetName { get; set; }
public Car()
{
}
public Car(string petName, int maxSp, int currSp)
{
MaxSp = maxSp;
CurrSp = currSp;
PetName = petName;
}
public bool CarIsDead { get; set; }
public delegate void CarEngineHandler(string message);
private CarEngineHandler listOfCarHandlers;
public void RegisterWithCarEngine (CarEngineHandler messageToMethod)
{
listOfCarHandlers = messageToMethod;
}
public void Accelerate(int baseSpeed)
{
if (CarIsDead)
{
if (listOfCarHandlers != null)
listOfCarHandlers("Sorry but car is dead");
}
else
{
CurrSp += baseSpeed;
if (10 == (MaxSp - CurrSp) && listOfCarHandlers != null)
{
listOfCarHandlers("Careful, you gonna blow!");
}
if (CurrSp > MaxSp)
{
CarIsDead = true;
}
else Console.WriteLine("Current Speed is {0}", CurrSp);
}
}
}
Если я установлю OnCarEngineEvent как статический, программа будет работать.Но если я наберу его как «public void OnCarEngineEvent (string msg)», то я не смогу добраться до метода в случае вызова делегата.
спасибо.