2016-10-27 4 views
0

私は階層person,studentおよびteacherを持っています。学生と教師を比較するためにC#で一般的な比較方法を作成する方法

personが基本クラスであり、studentおよびteacherが派生クラスです。

Teacherが給与を有し、StudentMarksを有する。 Studentまたはteacherオブジェクトを送信するかどうかにかかわらず、一般的な比較メソッドを実装したいと思います。

比較方法は、それを比較し、t1.salarayt2.salaryよりも大きいので、trueを戻す場合、同じ方法でs1.marks > s2.marksを比較する必要がある場合trueを返します。

私のコードは次のとおりです。

namespace ConsoleApplication5 
{ 
    public class person 
    { 
     String name; 
     int cnic; 

     public String Name 
     {  
      get 
      {  
       return name; 
      } 
      set 
      {  
       name = value; 
      } 
     } 

     public int Cnic 
     {  
      get 
      {  
       return cnic; 
      } 
      set 
      {  
       cnic = value; 
      } 
     } 

     public void Marks 
     {     
     }  
    } 
} 

    class student : person 
    { 
     String rollno; 
     double marks; 

     public String Rollno 
     { 
      get 
      {  
       return rollno; 
      } 
      set 
      { 
       rollno = value; 
      }  
     } 

     public double Marks 
     { 
      get 
      {  
       return marks; 
      } 
      set 
      { 
       marks = value;  
      } 
     }    
    } 
} 

class Teacher : person 
{ 
    int salary; 
    public int Salary 
    { 
     get 
      {  
       return salary; 
      } 
      set 
      { 
       salary = value;  
      } 
     }   
    } 
} 

**Main class is:** 

class Program 
    { 
     static void Main(string[] args) 
     { 

      student o1 = new student(); 
      o1.Marks = 78.0; 
      o1.Name = "Abuzar"; 

      Console.WriteLine(); 
      Console.WriteLine("Student: 1"); 
      Console.WriteLine("Name:" + o1.Name); 
      Console.WriteLine("Marks:" + o1.Marks); 
      Console.WriteLine("Roll No:" + o1.Rollno); 
      student o2 = new student(); 
      o2.Marks = 78.0; 
      o2.Name = "Abuzar"; 

      Console.WriteLine(); 
      Console.WriteLine("Student: 2"); 

      Console.WriteLine("Name:" + o2.Name); 
      Console.WriteLine("Marks:" + o2.Marks); 
      Console.WriteLine("Roll No:" + o2.Rollno); 
      student o3 = new student(); 
      o3.Marks = 80.5; 
      o3.Name = "Liaqat"; 
      o3.Rollno = "FA14-BSE-123"; 
      Console.WriteLine(); 
      Console.WriteLine("Student: 3"); 
      Console.WriteLine("Name:" + o3.Name); 
      Console.WriteLine("Marks:" + o3.Marks); 
      Console.WriteLine("Roll No:" + o3.Rollno); 
      student o4 = new student(); 
      o4.Marks = 74; 
      o4.Name = "Mohsin"; 
      o4.Rollno = "FA14-BSE-123"; 
      Console.WriteLine(); 
      Console.WriteLine("Student: 4"); 

      Console.WriteLine("Name:" + o4.Name); 
      Console.WriteLine("Marks:" + o4.Marks); 
      Console.WriteLine("Roll No:" + o4.Rollno); 
      student o5 = new student(); 
      o5.Marks = 45.0; 
      o5.Name = "Asad"; 
      o5.Rollno = "FA14-BSE-201"; 
      Console.WriteLine(); 
      Console.WriteLine("Student: 5"); 
      Console.WriteLine("Name:" + o5.Name); 
      Console.WriteLine("Marks:" + o5.Marks); 
      Console.WriteLine("Roll No:" + o5.Rollno); 

      Teacher t1 = new Teacher(); 
      t1.Name = "Asad Rafiq"; 
      t1.Salary = 2500; 
      t1.Cnic = 17301 - 2568 - 89; 
      Console.WriteLine(); 
      Console.WriteLine("Teacher: 1"); 
      Console.WriteLine("Name:" + t1.Name); 
      Console.WriteLine("Cnic:" + t1.Cnic); 
      Console.WriteLine("Salary:" + t1.Salary); 

      Teacher t2 = new Teacher(); 
      t2.Name = "Sara irum"; 
      t2.Salary = 30000; 
      t2.Cnic = 17301 - 2512 - 80; 
      Console.WriteLine(); 
      Console.WriteLine("Teacher: 2"); 
      Console.WriteLine("Name:" + t2.Name); 
      Console.WriteLine("Cnic:" + t2.Cnic); 
      Console.WriteLine("Salary:" + t2.Salary); 
      Teacher t3 = new Teacher(); 
      t3.Name = "Sanam Ali"; 
      t3.Salary = 2500; 
      t3.Cnic = 17301 - 2568 - 89; 
      Console.WriteLine(); 
      Console.WriteLine("Teacher: 3"); 
      Console.WriteLine("Name:" + t3.Name); 
      Console.WriteLine("Cnic:" + t3.Cnic); 
      Console.WriteLine("Salary:" + t3.Salary); 
      Teacher t4 = new Teacher(); 
      t4.Name = "Abbas khalid"; 
      t4.Salary = 80000; 
      t4.Cnic = 17301 - 2568 - 89; 

      Console.WriteLine(); 

      Console.WriteLine("Teacher: 4"); 
      Console.WriteLine("Name:" + t4.Name); 
      Console.WriteLine("Cnic:" + t4.Cnic); 
      Console.WriteLine("Salary:" + t4.Salary); 
      Teacher t5 = new Teacher(); 
      t5.Name = "Sana Malik"; 
      t5.Salary = 90000; 
      t5.Cnic = 17301 - 2168 - 89; 

      Boolean b = o1.Compar(o2); 

     } 
    } 
}                                                                                                                                                                                        
+0

あなたの問題はどこですか?あなたのすべてのクラスで 'object.Equals'をオーバーライドし、あなたが行った比較ロジックでオーバーライドします。 Btw:自動プロパティを使用してコードを減らし、投稿内でスクロールしやすくするため、 'int MyProp {get myValue; }セット{myValue =値; }} '使用する' MyProp {get;セット; } '。 – HimBromBeere

+0

GetTypeを使用してクラス名を取得します。学生学生=新しい学生(); タイプtype = student。GetType(); –

+0

どこにあなたの情報を印刷するために、各オブジェクトのToString()をオーバーライドするかを、 – Ogbe

答えて

0

public override bool Equals(object obj) 
      { 
       if (this.marks == ((student)obj).marks) 
        return true; 
       else 
        return false; 
      } 

人のクラスでこれを試してみて、あまりにも教師のクラスのために行います。

public override bool Equals(object obj) 
       { 
        if (this.salary == ((Teacher)obj).salary) 
         return true; 
        else 
         return false; 
       } 

を比較する。

0

チェックオブジェクトまたは「オブジェクト教師である」「オブジェクトが学生である」と。

0

使用キーワード

if(o2 is student) 
    { 
//do this 
    } 
    else if(o2 is teacher) 
    { 
    //do this 
    } 

C#5.0 Proの本を相談して詳細

0

の.NETフレームワークです。この似ている一般的な方法で作成します。

public bool Comparer<T>(T object1, T object2) 
    { 
     if (object1 is Student && object2 is Student) 
     { 
      var student1 = (Student)(object)object1; 
      var student2 = (Student)(object)object2; 
      return student1.Mark == student2.Mark; 
     } 
     else if (object1 is Teacher && object2 is Teacher) 
     { 
      var teacher1 = (Teacher)(object) object1; 
      var teacher2 = (Teacher)(object) object2; 
      return teacher1.Salary == teacher2.Salary; 
     } 
     else 
     { 
      //... Put your other logic here 
     } 

     return false; 
    } 
0
public bool CompareValues(double value1, double value2) 
{ 
    return (value1 > value2); 
} 

public bool CompareValues(object p1, object p2) 
{ 
    try 
    { 
     if (p1 is student && p2 is student) 
     { 
      var student1 = (student)p1; 
      var student2 = (student)p2; 
      return CompareValues(student1.Marks, student2.Marks); 
     } 
     else if (p1 is Teacher && p2 is Teacher) 
     { 
      var teacher1 = (Teacher)p1; 
      var teacher2 = (Teacher)p2; 
      return CompareValues(teacher1.Salary, teacher2.Salary); 
     } 
     else 
     { 
      //can't compare different values 
      return false; 
     } 
    } 
    catch(Exception ex) 
    { 
     throw ex; 
    }    
} 
0

私は "一般的な"比較に同意しません。派生した人物ごとに異なる比較方法があるので、比較はそのクラスに固有でなければなりません。したがって、各クラスの比較メソッドを実装/オーバーライドします。 EXのために

:先生のクラスで

// override the object comparison function: Equals 
public override bool Equals(object obj) 
{ 
    if(obj == null) 
    { 
     return false; 
    } 
    if(obj is Teacher) 
    { 
     return this.Salary == ((Teacher)obj).Salary; 
    } 
    return base.Compare(obj); // most likely to be false... 
} 
// Overriding GetHashCode is necessary to override the Equals function 
public override int GetHashCode() 
{ 
    return base.GetHashCode(); 
} 

// override the < <= > >= == != operators 
public static bool operator <(Teacher t1, Teacher t2) 
{ 
    return t1.Salary < t2.Salary; 
} 
public static bool operator >(Teacher t1, Teacher t2) 
{ 
    return t1.Salary > t2.Salary; 
} 
public static bool operator <=(Teacher t1, Teacher t2) 
{ 
    return t1.Salary <= t2.Salary; 
} 
public static bool operator >=(Teacher t1, Teacher t2) 
{ 
    return t1.Salary < t2.Salary; 
} 
public static bool operator ==(Teacher t1, Teacher t2) 
{ 
    return t1.Salary == t2.Salary; 
} 
public static bool operator !=(Teacher t1, Teacher t2) 
{ 
    return t1.Salary != t2.Salary; 
} 

次に、あなたの主にあなたも学生のクラスのために同じことを繰り返し、マークに給与を変更

bool doesTeacher1HaveBiggerSalary = teacher1 > teacher2; 

を使用することができます。

次回、基本Personクラスの比較方法を検討することをおすすめします。

関連する問題