Esto es menor, lo sé, pero digamos que tengo una clase de carácter y una clase (sobre todo porque eso es en lo que estoy trabajando). El personaje de clase tiene seis habilidades (tan típico D & D ...). básicamente:Cómo crear una asignación simplificada o propiedad predeterminada para una clase en C#
public class Character
{
public Character()
{
this.Str = new Ability("Strength", "Str");
this.Dex = new Ability("Dexterity", "Dex");
this.Con = new Ability("Constitution", "Con");
this.Int = new Ability("Intelligence", "Int");
this.Wis = new Ability("Wisdom", "Wis");
this.Cha = new Ability("Charisma", "Cha");
}
#region Abilities
public Ability Str { get; set; }
public Ability Dex { get; set; }
public Ability Con { get; set; }
public Ability Int { get; set; }
public Ability Wis { get; set; }
public Ability Cha { get; set; }
#endregion
}
y
public class Ability
{
public Ability()
{
Score = 10;
}
public Ability(string Name, string Abbr)
: this()
{
this.Name = Name;
this.Abbr = Abbr;
}
public string Name { get; set; }
public string Abbr { get; set; }
public int Score { get; set; }
public int Mod
{
get
{
return (Score - 10)/2;
}
}
}
Cuando en realidad el uso de estas propiedades de habilidad en el código futuro, me gustaría ser capaz de defecto sólo la puntuación, así:
//Conan hits someone
int damage = RollDice("2d6") + Conan.Str;
//evil sorcerer attack drains strength
Conan.Str = 0;
en lugar de:
//Conan hits someone
int damage = RollDie("2d6") + Conan.Str.Score;
//evil sorcerer attack drains strength
Conan.Str.Score = 0;
Ahora, el primer caso se puede resolver con una conversión implícita:
public static implicit operator int(Ability a)
{
return a.Score;
}
¿Alguien me puede ayudar con el reverso? La conversión implícita de esta manera:
public static implicit operator Ability(int a)
{
return new Ability(){ Score = a };
}
reemplazará todo el atributo en lugar de sólo la puntuación del atributo — no el resultado deseado ...
Como que realmente * * algo que desea hacer? ¿Es válida una habilidad sin nombre ni abreviatura? Tendrá que recordar que nunca puede almacenar estas habilidades 'int to Ability' porque carecen de datos de visualización. –
Es un buen punto, Ed. Respuesta corta, no realmente (particularmente porque el nombre y la localización de la falta de Abbr en algún momento). El ejemplo se encuentra, sin embargo, porque también necesitaré agregar propiedades "Bonus", "CurScore" y "CurMod" a Ability. –
Si tu clase de personaje era estática, eso sería fácil de hacer. Obviamente, debe tener varios caracteres para que no pueda ser estático. – GianT971