c#泛型绩点计算器代码分析
以下是一个使用C#编写的泛型绩点计算器代码的分析:
using System;
using System.Collections.Generic;
public class GradePointCalculator<T> where T : IGrade
{
private List<T> grades;
public GradePointCalculator()
{
grades = new List<T>();
}
public void AddGrade(T grade)
{
grades.Add(grade);
}
public double CalculateGPA()
{
double totalCreditHours = 0;
double totalGradePoints = 0;
foreach (T grade in grades)
{
totalCreditHours += grade.CreditHours;
totalGradePoints += grade.GradePoints * grade.CreditHours;
}
return totalGradePoints / totalCreditHours;
}
}
public interface IGrade
{
double CreditHours { get; }
double GradePoints { get; }
}
public class Grade : IGrade
{
public double CreditHours { get; set; }
public double GradePoints { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
GradePointCalculator<Grade> calculator = new GradePointCalculator<Grade>();
Grade grade1 = new Grade { CreditHours = 3, GradePoints = 4.0 };
Grade grade2 = new Grade { CreditHours = 4, GradePoints = 3.5 };
Grade grade3 = new Grade { CreditHours = 2, GradePoints = 3.0 };
calculator.AddGrade(grade1);
calculator.AddGrade(grade2);
calculator.AddGrade(grade3);
double gpa = calculator.CalculateGPA();
Console.WriteLine("GPA: " + gpa);
}
}
代码中定义了一个GradePointCalculator类,它是一个泛型类,使用T作为类型参数,要求T必须实现IGrade接口。GradePointCalculator类有一个grades列表用于存储成绩。它提供了AddGrade方法用于添加成绩,以及CalculateGPA方法用于计算绩点平均值。
IGrade接口定义了两个属性:CreditHours表示学分,GradePoints表示绩点。
Grade类实现了IGrade接口,它有两个属性CreditHours和GradePoints,分别表示学分和绩点。
在Main方法中,创建了一个GradePointCalculator<Grade>对象,然后创建了三个Grade对象,分别表示三门课的成绩。将这三个成绩添加到calculator对象中,然后调用CalculateGPA方法计算绩点平均值,并将结果输出到控制台。
这个代码示例展示了如何使用泛型类和接口来实现一个绩点计算器,可以方便地计算不同类型的成绩的绩点平均值。
原文地址: http://www.cveoy.top/t/topic/h4Kw 著作权归作者所有。请勿转载和采集!