Question

Je me demande s'il y a une fonction comme l'héritage de la méthode plutôt que de tout l'héritage de classe, permettez-moi de préciser ce que je suis en train d'expliquer:

class a {
   public void GetA(){
     // some logic here
}
}

class b {
    public void GetB() : new Class().GetA()
}

Je sais qu'il fait un peu bizarre mais je lisais comment faire délégation dans le modèle de composition d'objet et je pensais que ce modèle pour une raison quelconque.

Était-ce utile?

La solution

Si vous voulez juste appeler Geta () à l'intérieur de GetB (), mais ne veulent pas définir ou explicitement référence à une instance d'une classe dans GetB (), vous pouvez passer Geta () en tant que délégué.

En C #, il y a beaucoup de délégués prédéfinis tels que action et Func . Ou bien, vous pouvez toujours rouler votre propre délégué pour correspondre à la signature de la méthode.

    class a
    {
        public void GetA()
        {
            Console.WriteLine("Hello World!");
        }
    }

    class b
    {
        // No explicit reference to class a of any kind.
        public void GetB(Action action)
        {
            action();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var a = new a();
            var b = new b();

            b.GetB(a.GetA);
        }
    }

Autres conseils

Une façon courante de faire composition est de créer une variable de membre privé dans la classe B, de type de classe A, et en GetB () appelle a.GetA (). Par exemple:

class a {
   public void GetA(){
     // some logic here
   }
}

class b {
    private a _a=new a();

    public void GetB()
    {
         _a.GetA();
    } 
}

Une autre option pourrait être de définir une variable de membre délégué appelé GetB au lieu de la méthode simple et permet au code d'appel pour fournir le code qui est exécuté par GetB ().

Le plus proche chose que je peux penser est comment en C #, vous pouvez « hériter » constructeur d'une classe dans celui de sa classe enfant (ou un constructeur surchargé de la même classe), comme suit:

class Animal {
    public string Species { get; set; }

    public Animal(string species) {
        Species = species;
    }
}

class Human : Animal {
    public string Name { get; set; }

    public Human(string name) : base("Homo sapien") {
        Name = name;
    }
}

Le comportement du code ci-dessus est assez simple: le constructeur de la classe Human appelle essentiellement le constructeur de la classe Animal avant de faire quoi que ce soit d'autre. Pourquoi cette même fonctionnalité ne sont pas disponibles à des méthodes non-constructeur, je ne suis pas sûr.

Ceci est impossible. Si vous voulez b.GetB réutiliser la fonctionnalité de a.GetA alors vous devez instancier un a et invoquer a.GetA.

Une approche légèrement différente serait d'accepter une instance de ClassA dans le constructeur de ClassB, plutôt que instancier directement. Cela appliquera le inversion des dépendances @ réponse de Ash:

public class ClassB
{
    private readonly ClassA _a;

    public b(ClassA a)
    {
        _a = a;
    }

    public void GetB()
    {
        _a.GetA();

        // Other logic
    }
}
public class Article
{

 public object AddOrUpdate(params object[] paras){

   return null;

  }

}

public class Test:Article
{

 public new object AddOrUpdate(params object[] paras){

   //do your logic......

    return base.AddOrUpdate(paras);

 }


}

vous dire cela? C'est inhret une classe peut faire obtenir ou définir la propriété d'objet BASE.

si vous le faites avec délégué, vous devez faire plus travail avec la même logique.

mais délégué peut obtenir l'objet de domaine diffenent et faire plus sur app chose.

Si Geta () est remplacée par une méthode statique, vous pouvez simplement l'appeler dans la fonction GetB ():

class a { 
   public static void GetA() { 
     // some logic here 
   } 
} 

class b { 
    public void GetB() {
      a.GetA();
    }
} 

Si Geta () n'est pas statique, il n'a pas de sens puisque Geta () a besoin d'un contexte de l'objet (par exemple., L'invisible « ce » pointeur) par définition. Vous ne pouvez pas passer une instance de l'objet B à la classe A, classe A ne sait rien au sujet de la classe B.

Qu'est-ce que vous essayez vraiment faire?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top