2009-09-10 3 views
1

Допустим, у меня есть пространство имен GPS, где я могу назвать такие вещи, как GPS.devise.coordinates.getLoc, которые просто вернут GPS-координаты моего устройства.C# Назначить переменную вызову класса

Как я могу назначить все, что «GPS.devise.coordinates» многословно для переменной, такой как «Я»?

Так что я мог бы вместо этого использовать Me.getLoc.

Заранее спасибо

ответ

1

Предполагая getLoc() является статическим, попробуйте следующее:

using Me = GPS.devise.coordinates; 

Это часто используется для сокращения пространства имен, когда классы имеют общие имена. Отличным примером для проверки были бы библиотеки VSTO, в которых большинство пространств имен имеют класс Application.

+0

То, что мне нужно, спасибо. –

2

Вы можете выставить свойство, возвратили его, как это:

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

избили меня :) – Pondidum

+0

Это не было бы особенно хорошим дизайном API, если метод getLoc возвращает новое значение при каждом его вызове (как я подозреваю). Ожидается, что свойство будет возвращать один и тот же объект при каждом вызове. –

+1

В дополнение к комментариям комментариев ожидается возврат свойства. Вызов GetLoc может привести к долговременному методу. – PVitt

0

какой класс будет 'Me' быть?

если «Я» был замолвите класс Человек

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

Если getLoc это свойство, вы можете просто сделать это:

var me = GPS.devise.coordinates.getLoc; 

Однако, я подозреваю, что так как вы просите, getLoc является методом. В этом случае вы можете назначить группу методов делегату. В C# 3.0 вы можете сделать это:

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

, который позволит вам получить координаты, как это:

var coordinates = me(); 

Альтернативой декларация me бы это:

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

предполагая что возвращаемый тип getLoc - Coords.

Эти два объявления me составляют одно и то же - это всего лишь два разных способа его написания.


Если вы просто хотите стенографии для coordinates, потому что она имеет более чем один метод, который вы хотели бы, чтобы вызвать это было бы очень просто. Хотя я не могу сказать, из вашего примера coordinates, является ли поле или свойство, это не имеет значения, потому что в обоих случаях нужно просто присвоить объект новой переменной:

var coords = GPS.devise.coordinates; 

Затем вы можете вызывать методы на coords переменной:

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

и т.д.

Это будет работать с любой версией C# (даже 1.0) с небольшим изменением, что вместо var вам нужно будет явно объявить тип переменной. var - это функция C# 3.0 (Visual Studio 2008).

+0

Что делать, если GPS.devise.coordinates, было больше методов? Мне хотелось что-то вроде: GPS.devise.coordinates Me; Как прокси для GPS.devise.coordinates, таких как: Me.GetLoc Me.GetSatTime Me.etc Вместо GPS.devise.coordinates.getLoc GPS.devise.coordinates.getSatTime GPS .devise.coordinates.etc –

+0

PS: getLoc - это метод –

+0

Я отредактировал ответ, чтобы ответить на ваш дополнительный вопрос. Надеюсь это поможет. –

Смежные вопросы