मैं किसी भी आरपीजी की तरह वस्तुओं की एक साधारण "सूची" बनाने की कोशिश कर रहा हूं। मेरे पास बहुत मूल कक्षाएं हैं, जिनमें गुण हैं।सी # सूची <baseClass> - विरासत में कक्षाओं को भी स्टोर करने का कोई तरीका भी?
वैसे भी, मेरे पास item
का बेस क्लास है और उसमें से विरासत weapon
है। item
में गुण (नाम, मूल्य, वजन, "महत्वपूर्ण वस्तु") हैं जिनका उपयोग weapon
के भीतर भी किया जाता है, लेकिन weapon
में अतिरिक्त गुण (आक्रमण, रक्षा, गति, सौहार्द) हैं।
मैं निम्नलिखित कोड मिल गया है (खेद है पठनीयता भयानक है):
static void Main(string[] args)
{
List<item> inventory = new List<item>();
inventory.Add(new weapon("Souleater", 4000, 25.50f, false, 75, 30, 1.25f, 2));
//item---------------------------> weapon--------->
Console.Write("Name: {0}\nValue: {1}\nWeight: {2}\nDiscardable: {3}\nAttack: {4}\nDefense: {5}\nSpeed: {6}\nHandedness: {7}",
inventory[0].Name, inventory[0].BValue, inventory[0].Weight, inventory[0].Discard,
inventory[0].Atk, inventory[0].Def, inventory[0].Speed, inventory[0].Hands);
Console.ReadLine();
}
मूल रूप से, मैं क्या सूची के लिए एक नया weapon
जोड़ने करना कोशिश कर रहा हूँ, लेकिन सूची एक है List<item>
प्रकार। मैं उम्मीद कर रहा था कि, इसकी विरासत के कारण, इसे स्वीकार किया जाएगा। यह था, लेकिन गुण weapon
के लिए विशिष्ट पहुँचा जा करने में सक्षम नहीं हैं:
('shopSystem.item' 'Atk' के लिए एक परिभाषा और कोई विस्तार विधि 'Atk' प्रकार का एक पहला तर्क को स्वीकार करने में नहीं है 'shopSystem.item' पाया जा सकता है)
तो, क्या मैं यहां जो इरादा कर रहा था उसे हासिल करने का कोई तरीका है? एक "इन्वेंट्री" है जो item
ऑब्जेक्ट्स, साथ ही साथ weapon
, armour
, accessory
आदि ऑब्जेक्ट्स स्टोर कर सकती है, जो item
से प्राप्त होती हैं? यह उल्लेख करने योग्य भी है कि यदि मैं निम्नलिखित घोषित करता हूं तो मैं सभी वांछित गुणों तक पहुंच सकता हूं:
weapon Foo = new weapon("Sword", 200, 20.00f, false, 30, 20, 1.10f, 1);
पढ़ने के लिए बहुत धन्यवाद।
यहाँ, item
और weapon
वर्गों है कि अगर किसी को दिलचस्पी है:
class item
{
#region Region: Item Attributes
protected string name = "";
protected int baseValue = 0;
protected float weight = 0.00f;
protected bool noDiscard = false;
#endregion
public item(string n, int v, float w, bool nd){
name = n; baseValue = v; weight = w; noDiscard = nd;}
public string Name{
get{return name;}
set{if(value != ""){
name = value;}
}//end set
}
public int BValue{
get{return baseValue;}
}
public float Weight{
get{return weight;}
}
public bool Discard{
get{return noDiscard;}
}
}
class weapon : item
{
#region Region: Weapon Attributes
private int atk = 0;
private int def = 0;
private float speed = 0.00f;
private byte hands = 0;
#endregion
public weapon(string n, int v, float w, bool nd, int a, int d, float s, byte h) : base(n, v, w, nd){
atk = a; def =d; speed = s; hands = h;}
public int Atk{
get{return atk;}
}
public int Def{
get{return def;}
}
public float Speed{
get{return speed;}
}
public byte Hands{
get{return hands;}
}
}
अगर मैं का उपयोग '(हथियार) सूची [0] .Atk', मैं अभी भी एक ही त्रुटि संदेश मिलता है। – Deadrust
का उपयोग कर ((हथियार) सूची [0])। Atk बजाय –
ऐ प्रयास करें, कि एक काम करता है! धन्यवाद! – Deadrust