2009-09-10 10 views
1

Disons que j'ai un espace de noms GPS, où je peux appeler des choses comme GPS.devise.coordinates.getLoc, qui renvoient simplement les coordonnées GPS de mon appareil.C# Affecter une variable à un appel de classe

Comment puis-je affecter tout ce "GPS.devise.coordinates" verbeux à une variable telle que "Me"?

Donc, je pourrais faire Me.getLoc à la place.

Merci à l'avance

Répondre

1

En supposant getLoc() est statique, essayez d'utiliser les éléments suivants:

using Me = GPS.devise.coordinates; 

Ceci est souvent utilisé pour raccourcir les espaces de noms où les classes ont des noms communs. Un bon exemple à vérifier serait les bibliothèques VSTO, où la plupart des espaces de noms ont une classe Application.

+0

Exactement ce dont j'avais besoin, merci. –

2

Vous pouvez exposer une propriété qui sont revenus, comme ceci:

public Point getLoc { get { return this.device.coordinates.getLoc;}} 
+0

battu moi :) – Pondidum

+0

Ce ne serait pas une conception d'API particulièrement bonne si la méthode getLoc renvoie une nouvelle valeur chaque fois qu'elle est appelée (comme je le soupçonne). Une propriété doit renvoyer le même objet chaque fois qu'il est appelé. –

+1

En plus des marques, le commentaire est une propriété qui devrait être renvoyée immédiatement. L'appel de GetLoc peut potentiellement entraîner une méthode longue durée. – PVitt

0

quelle classe serait « moi » être?

si 'Me' était de dire une classe personne

public class Person 
{ 
    public Person(){} 

    private GPS _gps = new GPS(); 
    public Coords getLoc 
    { 
     get{ 
      return _gps.devise.coordinates.getLoc; 
     } 
    } 
} 


Person Me = new Person; 
Coords MyLocation = Me.getLoc; 
0

Si getLoc est une propriété, vous pouvez simplement faire ceci:

var me = GPS.devise.coordinates.getLoc; 

Cependant, je pense que puisque vous demandez, getLoc est une méthode. Dans ce cas, vous pouvez affecter le groupe de méthodes à un délégué. En C# 3.0, vous pouvez le faire:

var me =() => GPS.devise.coordinates.getLoc(); 

qui vous permettra d'obtenir les coordonnées comme celui-ci:

var coordinates = me(); 

Une autre déclaration de me serait ceci:

Func<Coords> me = GPS.devise.coordinates.getLoc; 

en supposant que le type de retour de getLoc est Coords. Ces deux déclarations de me équivalent à la même chose - c'est juste deux façons différentes de l'écrire.


Si vous voulez simplement un raccourci pour coordinates parce qu'il a plus d'une méthode que vous souhaitez appeler ce serait très simple. Bien que je ne peux pas dire de votre exemple si coordinates est un champ ou une propriété, il n'a pas d'importance car dans les deux cas, vous attribuez simplement l'objet à une nouvelle variable:

var coords = GPS.devise.coordinates; 

vous pouvez ensuite alors invoquer des méthodes sur la variable coords:

var loc = coords.getLoc(); 
var satTime = coords.getSatTime(); 

etc.

Cela fonctionne avec une version de C# (même 1,0) avec la légère modification qu'au lieu de var vous devez déclarer explicitement la type de la variable. var est une fonctionnalité C# 3.0 (Visual Studio 2008).

+0

Et si le GPS.devise.coordinates, avait plus de méthodes? Je voulais quelque chose comme: GPS.devise.coordinates Me; En tant que proxy pour GPS.devise.coordinates, tels que: Me.GetLoc Me.GetSatTime Me.etc Au lieu de GPS.devise.coordinates.getLoc GPS.devise.coordinates.getSatTime GPS .devise.coordinates.etc –

+0

PS: getLoc est une méthode –

+0

J'ai édité la réponse pour répondre à votre question supplémentaire. J'espère que cela t'aides. –

Questions connexes