DK: ну в принципе почему нет, но у вас разве все эти варианты будут использоваться? То есть у вас разве буду туры без Price? Или туры без Hotel? Если да, то почему бы и не сделать конструктор для каждого варианта
причем сам конструктор может быть такого вида
public Tour(string country, string city) : this(country)
{
City = city;
}
DK: Ну наследование это все таки немного другое, наследование соответствует утверждению "является", то есть в вашем случае "Город является Страной", что не верно.
Итак, как создавать классы, определите для чего вам класс и что конкретно должно быть в этом классе, начните с того, что конкретно вы хотите. Определите базовые сущности, с которыми вы будете работать (выводить на экран, изменять создавать) Пользователь, Офис, Тур... Если ваша программа это не программа по работе со странами и их городами, то и делать страну как базовый объект для работы не имеет смысла.
Дальше, вы хотите показать адрес пользователю к примеру, вы хотите показать ему одну страну, один город, одну улицу, один номер дома и один номер офиса, все это можно было бы сделать свойствами объекта Офис, но так как мы знаем, что эти поля - это адрес, это готовая и понятная сущность, то и выносим это дело в сущность Адрес, и уже адрес делаем свойством офиса. Итак теперь у нашего офиса есть какой-то адрес, то есть какая-то страна, какой-то город и т.д.
Таким образом вы создаете какой-то конкретный офис и указываете у него какой-то конкретный адрес. А чтобы сделать выборку например по офисам в какой то конкретной стране вы формируете запрос к коллекции или к базе данных с нужным фильтром. Например у вас есть массив офисов где записаны все ваши офисы (offices), массив в C# является коллекцией, вы можете например использовать Linq для запросов, то выбор всех российских офисов будет выглядеть вот так:
var russuanOffices = offices.Where(o => o.Address.Country == "Россия").ToArray();
Создайте переменную до объявления нового потока, вместо var vk, сделайте string accessToken = null; а в потоке уже accessToken = parameters.Get("access_token"); при использовании метода Authorize() делайте проверку на null
Жека: Ну что мешает запустить сервер из под админа, он все равно как служба работает, а самому работать (проверка почты, клиент ПО, web) из под аккаунта без админских прав.
Если у вас сервер, то настройте фаервол на ваше ПО, тут нужно читать профильные форумы по настройке окружения для продакшена вашего софта. Устанавливайте на сервер только проверенное ПО, подключайтесь с чистой машины к серверу. Я вижу это так. Просто какие вы видите варианты, как попадет шифратор на сервер? Разумеется сервер должен выполнять функции сервера, не больше не меньше.
CAMOKPYT: С чего вы решили, что заранее никто не знает, какие будут задачи? Лично я сначала ставлю задачу, а только потом выбираю как и при помощи чего ее решить. Если бы был фреймворк, мог за вас позаботиться и подумать как решать все задачи, тогда зачем нужны вы?