2008-12-01 18 views
11

Tengo estas dos clases interactuando y estoy tratando de llamar a cuatro clases diferentes de la clase uno para su uso en la clase dos.¿Por qué no puedo llamar a un método público en otra clase?

Los métodos son públicos y devuelven valores, pero por alguna razón no se establece una conexión. El error que consigo cuando intento es: "An object reference is required for the nonstatic field, method, or property 'GradeBook.[method I want called]'"


tengo todo inicializado. No quiero crear los métodos como estáticos. Leí de nuevo los detalles de mi tarea y ni siquiera se supone que deba hacerlo, pero parece que no puedo hacer que esto funcione de todos modos. Lo digo.

myGradeBook. [Método] GraceBook. [Método]

Todo parece crear errores.

Los errores actuales:

The best overloaded method match or 'System.Console.WriteLine(string, object)' has some invalid arguments. 

Arugment '2': cannot convert from 'method group' to 'object' 

Ni siquiera estoy sur lo que quiere decir .... los

EDIT: acabo fijo que problema gracias al Paso a paso por las características de Visual Studio. No sé por qué me llevó tanto tiempo usarlo.

+0

Por favor, añadir más aclaraciones como cómo está invocando el método, es un método estático, o un método de instancia, etc. De lo contrario, esta pregunta quedará para interpretación. Todo lo mejor. –

+1

bueno, aprendí algo de su tarea ... – discorax

Respuesta

4

Debe crear una variable del tipo de la clase y, en primer lugar, establecerla como una nueva instancia del objeto.

GradeBook myGradeBook = new GradeBook(); 

Luego, llame al método en el dispositivo que acaba de crear.

myGradeBook.[method you want called] 
+0

¿Por qué tiene un voto negativo? –

+0

Mi error, leí algo mal y estaba en stackoverflow cuando estaba demasiado cansado. Sin embargo, puedo deshacer mi voto ahora ;-( – JoshBerke

+0

Puedes volver a hacer clic en la flecha hacia abajo para deshacer un voto hacia abajo. –

36

usted está tratando de llamar a un método de instancia de la clase. Para llamar a un método de instancia en una clase, debe crear una instancia para llamar al método. Si desea llamar al método en no instancias, agregue la palabra clave estática. Por ejemplo

class Example { 
    public static string NonInstanceMethod() { 
    return "static"; 
    } 
    public string InstanceMethod() { 
    return "non-static"; 
    } 
} 

static void SomeMethod() { 
    Console.WriteLine(Example.NonInstanceMethod()); 
    Console.WriteLine(Example.InstanceMethod()); // Does not compile 
    Example v1 = new Example(); 
    Console.WriteLine(v1.InstanceMethod()); 
} 
+0

Cuando cambio el método que quiero llamar para decir estático, las variables dentro de ese método se vuelven locas y yo obtener más errores. No puedo ganar. – Harris

+3

Sí, puede - si desea llamar a un método de instancia, llámelo en una instancia. Es la única manera que tiene sentido. De lo contrario, es como preguntar "perro" para ejecutar en lugar de preguntar un * particular * perro para correr. –

+0

pregunta de seguimiento para mi beneficio. ¿Puedes llamar al Método estático sin crear NUNCA una instancia de la clase, ya que parece que eso es lo que estás haciendo en el ejemplo? Estaré seguro para probar esto el lunes. Gracias por compartir – discorax

12

Parece que no está creando una instancia de su clase. Esa es la razón principal por la que aparece el error "se requiere una referencia de objeto".

MyClass myClass = new MyClass(); 

una vez que ha añadido que la línea a continuación, puede llamar a su método

myClass.myMethod(); 

Además, son todas sus clases en el mismo espacio de nombres? Cuando estaba aprendiendo C# por primera vez, este era un punto de encuentro común para mí.

+2

+1 porque parece una respuesta correcta. Quien rechazó esto, desearía que comentasen aquí. – Karl

2

Por ejemplo 1 y 2 es necesario crear métodos estáticos:

public static string InstanceMethod() {return "Hello World";} 

A continuación, por ejemplo 3 se necesita una instancia de su objeto para invocar el método:

object o = new object(); 
string s = o.InstanceMethod(); 
Cuestiones relacionadas