2016-08-24 2 views
1

Ich muss wissen, wie Sie eine Methode in einem Klassenkonstruktor übergeben, damit es später aufgerufen werden kann. Die Idee besteht darin, eine Bullet-Klasse zu erstellen, die zwei Eigenschaften hat, eine beschädigte ganze Zahl und eine Methode, die aufgerufen werden kann, wenn ein Geschoss dieses Typs ein Objekt getroffen hat. Der folgende Code sollte ein bisschen besser erklären:So speichern Sie eine Methode in einer Klasse später

public class Bullet 
{ 
    public Method OnHit; 
    public int Damage; 
    public Bullet(int Damage,Method OnHit) 
    { 
     this.Damage = Damage; 
     this.OnHit = OnHit; 
    } 
} 

Dies ist so, ich Kugeln machen kann, die unterschiedlichen Aufgaben beim Aufprall Vorform durch so etwas wie Bullet.OnHit (HitGameObject) ausgeführt wird.

Antwort

3

Sie können Action verwenden, um eine Funktion an eine Funktion zu übergeben und sie dann in einem anderen Action zu speichern. Die gespeicherte Funktion kann mit Action.Invoke() aufgerufen werden.

public class Bullet 
{ 
    public int Damage; 
    System.Action savedFunc; 

    public Bullet(int Damage, System.Action OnHit) 
    { 
     if (OnHit == null) 
     { 
      throw new ArgumentNullException("OnHit"); 
     } 

     this.Damage = Damage; 
     savedFunc = OnHit; 
    } 

    //Somewhere in your Bullet script when bullet damage == Damage 
    void yourLogicalCode() 
    { 
     int someBulletDamage = 30; 
     if (someBulletDamage == Damage) 
     { 
      //Call the function 
      savedFunc.Invoke(); 
     } 
    } 
} 

Nutzungs:

void Start() 
{ 
    Bullet bullet = new Bullet(30, myCallBackMethod); 
} 

void myCallBackMethod() 
{ 

} 
+1

nur eine Ergänzung. Das OP könnte auch System- "Delegaten" und "Ereignisse" verwenden. – Cabrra

+1

@Cabrra Ja, OP könnte rohe "Delegierte" und "Ereignisse" verwenden. es ist nur so, dass OP Funktion in eine Funktion übergeben wollte, dann später aufrufen ** NOT ** nur ein Ereignis später aufrufen. Ich denke, dass "System.Action" oder "Func" dafür viel geeigneter ist und weniger Code. – Programmer

+1

hervorragende Erklärung (auch upvoted) – Cabrra

0

Was Sie brauchen, heißt Delegaten in C#, Zuerst sollten Sie Methode Eingabe/Ausgabe definieren und dann arbeiten Sie mit Methoden dieses Typs genau wie Variablen.

public class Bullet 
{ 
public delegate void OnHit(bool something); 
public OnHit onHitMethod; 
public int Damage; 
public Bullet(int Damage, OnHit OnHit) 
{ 
    this.Damage = Damage; 
    this.onHitMethod = OnHit; 
} 
} 

in dieser Zeile public delegate void OnHit(bool something); Sie nur die Art des Delegaten definiert und in dieser Linie public OnHit onHitMethod; Sie die Methode wie eine Variable gerade definiert hat.

Verwandte Themen