Điều này rất nhỏ, tôi biết, nhưng hãy nói rằng tôi có một lớp nhân vật và một khả năng lớp (chủ yếu là vì đó là những gì tôi đang làm việc). Lớp nhân vật có sáu khả năng (vì vậy điển hình D & D ...). cơ bản:Cách tạo một bài tập đơn giản hoặc thuộc tính mặc định cho một lớp trong 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
}
và
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;
}
}
}
Khi thực sự sử dụng những tính năng trong mã tương lai, tôi muốn có thể để mặc định chỉ số điểm, như vậy:
//Conan hits someone
int damage = RollDice("2d6") + Conan.Str;
//evil sorcerer attack drains strength
Conan.Str = 0;
thay vì:
//Conan hits someone
int damage = RollDie("2d6") + Conan.Str.Score;
//evil sorcerer attack drains strength
Conan.Str.Score = 0;
Bây giờ, trường hợp đầu tiên có thể được xử lý với một chuyển đổi tiềm ẩn:
public static implicit operator int(Ability a)
{
return a.Score;
}
Ai có thể giúp tôi ngược lại không? chuyển đổi ngầm như thế này:
public static implicit operator Ability(int a)
{
return new Ability(){ Score = a };
}
sẽ thay thế toàn bộ thuộc tính thay vì chỉ số điểm của thuộc tính — không phải là kết quả mong muốn ...
Như vậy * thực sự * điều bạn muốn làm? Là một khả năng hợp lệ mà không có tên và viết tắt? Bạn sẽ phải nhớ rằng bạn không bao giờ có thể lưu trữ những khả năng 'int to Ability' này bởi vì chúng thiếu dữ liệu hiển thị. –
Đó là một điểm tốt, Ed. Câu trả lời ngắn gọn, không thực sự (đặc biệt là vì Tên và Abbr phạm lỗi nội địa hóa tại một số điểm). Ví dụ, vì tôi sẽ cần thêm các thuộc tính "Tiền thưởng", "CurScore" và "CurMod" vào Khả năng. –
Nếu lớp nhân vật của bạn là tĩnh, điều đó sẽ dễ thực hiện. Rõ ràng, bạn phải có các ký tự khác nhau vì vậy nó không thể tĩnh .. – GianT971