Заголовок скорей всего не передает сути вопроса. Имеется два интерфейса:
public interface IAttackParameters
{
double MagicAttack { get; set; }
double PhysicAttack { get; set; }
}
public interface Player
{
int Health { get; set; }
IAttackParameters AttackParameters { get; set; }
// other fields...
}
Эти интерфейсы находятся в библиотеке и ничего не знают о том где они потом реализуются.
Так вот вопрос в следующем, как реализовать данные интерфейсы и задать значения для полей AttackParameters.
public class Player : IPlayer
{
public int Health { get; set; }
public IAttackParameters AttackParameters { get; set; }
public void SetAttackParameters()
{
AttackParameters.MagicAttack = 10; // не работает
IAttackParameters.MagicAttack = 10; // не работает
}
}
Говорят что можно так:
public class Player : IPlayer
{
public int Health { get; set; }
public IAttackParameters AttackParameters { get; set; }
// Explicityly implement my interface
IAttackParameters IAttackParameters.AttackParameters
{
get { return AttackParameters; }
}
}
но что-то не красиво как то и не факт что будет работать. Может есть какой то более простой способ, так как ситуация должна быть довольно часто встречающейся.
Делаем реализацию обоих интерфейсов:
public class AttackParameters : IAttackParameters
{
public double PhysicAttack { get; set; }
public double MagicAttack { get; set; }
}
public class Player : IPlayer
{
public int Health { get; set; }
public IAttackParameters AttackParameters { get; set; }
public Player()
{
this.AttackParameters = new AttackParameters();
}
public void SetAttackParameters()
{
AttackParameters.MagicAttack = 10;
}
}
В итоге, наружу из Player
торчит только интерфейс IAttackParameters
, реализации могут быть любыми, можно пользоваться.
Интерфейсы требуют реализации. Но ваше 5-ое чувство Вас не обманывает, и то что вы хотите, реализуется с помощью Dependency Injection. Способ используемый для уменьшения связанности кода,неплохим выбором будет Ninject, как это работает хорошо объясняется тут
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ПриветствуюМожно ли использовать перечисление StringSplitOptions
Допустим есть форма на сайте, в нее вбивается телефон, затем по нажатию кнопки на указанный номер отправляется сообщение
Есть текст "myservercom/?download_file=41&wccc_key_email=email&key=key" Как получить из всего этого только значение после "/?download_file" ? В моем случае это 41