C # Création et utilisation de fonctions
J'ai besoin d'aide avec la programmation en C#; je suis nouveau et je viens de C en arrière-plan. J'ai une Application Console comme ceci:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Add_Function
{
class Program
{
static void Main(string[] args)
{
int a;
int b;
int c;
Console.WriteLine("Enter value of 'a':");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter value of 'b':");
b = Convert.ToInt32(Console.ReadLine());
//why can't I not use it this way?
c = Add(a, b);
Console.WriteLine("a + b = {0}", c);
}//END Main
public int Add(int x, int y)
{
int result = x + y;
return result;
}//END Add
}//END Program
}//END Add_Function
Il me donne cette erreur sur la ligne que j'appelle la méthode Add():
Une référence d'objet est requise pour la non-champ statique, la méthode ou la propriété 'Add_Function.Programme.Add(int, int)'
Quelqu'un peut-il m'expliquer pourquoi j'ai ce problème. Est-ce parce que l'architecture de C# est différent de C, et la façon dont je l'appel il est faux? Merci.
source d'informationauteur CaTx
Vous devez vous connecter pour publier un commentaire.
Remarque: en C#, le terme "fonction" est souvent remplacé par le terme "méthode". Pour l'amour de cette question il n'y a pas de différence, donc je vais juste utiliser le terme de "fonction".
Les autres réponses ont déjà donné un moyen rapide de fixer votre problème (il suffit de s'
Add
unstatic
fonction), mais j'aimerais vous expliquer pourquoi.C# a fondamentalement différents paradigme de conception de C. ce paradigme est appelé de la programmation orientée objet (POO). Expliquer toutes les différences entre la programmation orientée objet et la programmation fonctionnelle est au-delà de la portée de cette question, mais voici la version courte, car elle s'applique à vous.
L'écriture de votre programme en C, vous devez avoir créé une fonction qui additionne deux nombres, et que la fonction existe indépendamment et être appelée à partir de n'importe où. En C# la plupart des fonctions n'existent pas de façon indépendante; au lieu de cela, ils existent dans le contexte d'un objet. Dans votre exemple de code, seulement une instance (un objet) de la classe
Program
sait comment effectuerAdd
. Dit d'une autre manière, vous devez créer une instance deProgram
puis demanderProgram
pour effectuer uneAdd
pour vous.Les solutions que les gens vous a donné, à l'aide de la
static
mot-clé, route autour de cette conception. À l'aide de lastatic
mot-clé est un peu comme dire, "Hé, cette fonction je suis la définition n'a pas besoin de tout contexte et de l'état, il peut juste être appelé." Depuis votreAdd
fonction est très simple, cela fait sens. Comme vous plonger plus profondément dans la programmation orientée objet, vous allez trouver que vos fonctions deviennent plus compliquées et de s'appuyer sur la connaissance de leur état/contexte.Mon conseil: prendre une programmation orientée objet livre et préparez-vous à passer votre cerveau à partir de la programmation fonctionnelle, de la programmation orientée objet de la programmation. Vous êtes dedans pour un tour.
Vous devez faire de votre
Add
fonctionstatic
comme suit:static
signifie que la fonction n'est pas d'instance de classe dépendante. De sorte que vous pouvez l'appeler comme ça, sans avoir besoin de créer une instance de classe deProgram
classe.ou vous devez créer une instance de votre
Program
classe, et ensuite appelerAdd
sur cette instance. Comme:Ce code vous donne une erreur parce que votre
Add
fonction doit êtrestatic
:En C# il y a une distinction entre les fonctions qui opèrent sur des instances (non statique) et de fonctions qui ne fonctionnent pas sur les instances (statique). Exemple de fonctions peut appeler un autre exemple de fonctions et fonctions statiques, car ils ont une référence implicite à l'instance. En revanche, les fonctions statiques peut appeler que des fonctions statiques, ou sinon ils doivent le prévoir explicitement une instance sur laquelle appeler un non-static function.
Depuis
public static void Main(string[] args)
est statique, toutes les fonctions qu'il appelle besoin d'être statique.Parce que votre fonction est une instance ou d'une non-statique de la fonction, vous devez créer un objet le premier.
Ce qui erreur de build est de vous dire que vous devez avoir soit une instance de
Program
ou faireAdd
statique.Ce n'est pas vrai. vous pouvez lire (func type+ les expressions Lambda),( fonction anonyme"à l'aide de délégués type"),(type d'action +les expressions Lambda ),(Prédicat de type+les expressions Lambda). etc...etc...
ce sera le travail.
Suffit de faire votre
Add
fonctionstatic
par l'ajout de lastatic
mot-clé comme ceci:vous avez à faire, vous êtes à la fonction statique comme ce
vous pouvez faire le Programme.Ajouter au lieu d'Ajouter
vous pouvez également créer une nouvelle instance de Programme en va comme cette
La raison pour laquelle vous avez l'erreur est parce que votre ajouter une fonction est définie après votre aide en principal, si vous aviez à créer un prototype de fonction avant main dessus avec
public int Add(int x, int y);
ou vous pouvez simplement copier et coller l'ensemble de votreAdd
fonction ci-dessus principale cause principale est l'endroit où le compilateur commence l'exécution n'est-il pas logique de déclarer et définir une fonction avant de l'utiliser espère que ça aide. 😀