Делегатор конвертера помогает мне визуализировать обе совместно работающие концепции:
delegate TOutput Converter<in TInput, out TOutput>(TInput input);
TOutput
представляет ковариацию, в которой метод возвращает более конкретный тип .
TInput
представляет собой контравариантность, когда метод передается менее конкретным типом .
public class Dog { public string Name { get; set; } }
public class Poodle : Dog { public void DoBackflip(){ System.Console.WriteLine("2nd smartest breed - woof!"); } }
public static Poodle ConvertDogToPoodle(Dog dog)
{
return new Poodle() { Name = dog.Name };
}
List<Dog> dogs = new List<Dog>() { new Dog { Name = "Truffles" }, new Dog { Name = "Fuzzball" } };
List<Poodle> poodles = dogs.ConvertAll(new Converter<Dog, Poodle>(ConvertDogToPoodle));
poodles[0].DoBackflip();
Вы не сказали, что не хотите настольную версию, если используете c ++. В любом случае, вы можете использовать пространство имен Geolocation .
Пример проекта здесь .
Только для настольных компьютеров вы можете использовать ILocation . Sensor API также работает, проверьте правильность конфигурации набора инструментов SDK / VS.