2015-11-10 2 views
5

मैं इसके अंदर changeName विधि के साथ बेस क्लास Student बनाना चाहता हूं। मुझे studentclasses बेस क्लास Student से प्राप्त किया गया है, जैसे कि collegestudent आदि। मैं छात्रों के नाम बदलने में सक्षम होना चाहता हूं।सी # विधि: क्या 'व्युत्पन्न वर्गनाम' सामान्य रूप से डालने के लिए पैरामीटर नाम है?

public abstract class Student 
{ 
    public virtual void changeName(CollegeStudent s, string name) 
    { 
     s.firstName = name; 
    } 

    public abstract void outputDetails(); 
} 

public class CollegeStudent : Student 
{ 
    public string firstName; 
    public string lastName; 
    public string major; 
    public double GPA; 

    public override void outputDetails() 
    { 
     Console.WriteLine("Student " + firstName + "); 
    } 
} 

मुझे पता है कि इसके यदि संभव हो तो एक सामान्य पैरामीटर कि छात्र से किसी भी व्युत्पन्न वर्ग को स्वीकार करता है करने के लिए सार्वजनिक आभासी शून्य changeName पैरामीटर बदलना चाहते हैं:

मैं इस कोड है।

क्या यह सी # में संभव है?

(इस तरह कुछ:। सार्वजनिक आभासी शून्य changeName (Anyderivedclass रों, स्ट्रिंग नाम)

+0

हाँ आप इसके लिए सी # में जेनिक्स का उपयोग कर सकते हैं –

+0

आपका ** पहला नाम **, ** अंतिम नाम ** बेस क्लास में भी होना चाहिए। यह एक बेहतर संरचना होगी क्योंकि प्रत्येक छात्र का नाम कम से कम – Shaharyar

+0

धन्यवाद है। धावल पटेल: मैं इस उदाहरण में इसे कैसे लागू करूं? – Developerdeveloperdeveloper

उत्तर

7

यदि आपने अपना डिज़ाइन थोड़ा बदल दिया है, तो चीजें बहुत आसान हो जाएंगी। ऐसा लगता है कि आप जावा पृष्ठभूमि से आ रहे हैं, इसलिए देखते हैं कि सी # आपके कोड को बेहतर बनाने में कैसे मदद कर सकता है।

सबसे पहले, फर्स्टनाम/लास्टनाम फ़ील्ड लें और उन्हें बेस क्लास में ले जाएं, क्योंकि किसी भी छात्र पंजीकरण को इन्हें वैसे भी आपूर्ति करनी चाहिए। दूसरा, सी # में Properties नामक एक सुविधा है (विशेष रूप से यहां हम स्वत: कार्यान्वित गुणों का उपयोग कर सकते हैं, क्योंकि हमें सत्यापन की आवश्यकता नहीं है), जो मूल रूप से प्राप्त/सेट विधियों के लिए वाक्य रचनात्मक चीनी है। आप इस तरह देखने के लिए छात्र वर्ग को फिर से बना सकते हैं:

public abstract class Student 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

यह एक प्राप्त वर्ग के किसी भी मामले firstname और lastname गुणों को बदलने के लिए अनुमति देगा, किसी भी अतिरिक्त विधियां जोड़ने के बिना:

void Main() 
{ 
    var student = new CollegeStudent(); 
    student.FirstName = "Yuval"; 
} 

आम तौर पर, आप जिस ऑब्जेक्ट को बना रहे हैं उस पर कोई भी इंस्टेंस विधि अपने आप को म्यूट करने के लिए अपने स्वयं के प्रकार को स्वीकार नहीं करनी चाहिए।

+0

आपके इनपुट के लिए धन्यवाद! यह लॉजिकल इश्यू के लिए सबसे अच्छा समाधान जैसा प्रतीत होता है जो मैंने मुझे कुछ सैद्धांतिक सहायता प्रदान करने के साथ भी प्रस्तुत किया है! – Developerdeveloperdeveloper

+0

@ user3655413 आपका स्वागत है। –

5

लेकिन changeName() अपने सार छात्र का एक उदाहरण विधि आप इसे से एक का एक उदाहरण में क्यों गुजर रहे है डेरिवेटिव के रूप में यह एक पैरामीटर?

आप जेनरिक आवश्यकता क्यों है? यह रूप में सरल होना चाहिए ...

public abstract class Student 
{ 
    public abstract void changeName(string newName); 

    public abstract void outputDetails(); 
} 

public class CollegeStudent : Student 
{ 
    public string firstName; 
    public string lastName; 
    public string major; 
    public double GPA; 

    public override void changeName(string newName) 
    { 
      firstName = newName; 
    } 

    public override void outputDetails() 
    { 
     Console.WriteLine("Student " + firstName + "); 
    } 
} 

और वास्तव में (के रूप में बताया) आधार वर्ग में changeName() की उपस्थिति का सुझाव कि नाम गुण बी से संबंधित हैं एएस वर्ग, इसलिए यह निम्नानुसार होना चाहिए ...

public abstract class Student 
{ 
    public string firstName; 
    public string lastName; 

    public virtual void changeName(string newName) 
    { 
     firstName = newName; 
    } 

    public abstract void outputDetails(); 
} 

public class CollegeStudent : Student 
{ 
    public string major; 
    public double GPA; 

    public override void outputDetails() 
    { 
     Console.WriteLine("Student " + firstName + "); 
    } 
} 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद! – Developerdeveloperdeveloper

संबंधित मुद्दे