[C#, .Net] Vad är poängen/syftet med Interfaces?
Jag programmerar inom C#/.Net och försöker förstå mig på syftet med Interfaces. Jag vet att .Net och inte stödjer multilevel-inheritance och det problemet kan lösas med Interfaces. Om vi då kikar på följande modell:
public abstract class Person
{
string Name { get; set; }
int WorkExperience { get; set; }
decimal Salary { get; set; }
DateTime Birthday { get; set; }
bool IsFemale { get; set; }
public virtual decimal Contract(bool hasBeenSigned, decimal money)
{
return (decimal)Math.PI * (money * 9.99m);
}
}
//We implement IEngineerTask
public class FullTimeEmployee : Person, IEngineerTask
{
double MaxWorkingHours { get; set; }
List<Task> Tasks { get; set; }
public int DoPhysics()
{
throw new NotImplementedException();
}
public Delegate Resources(Dictionary<int, byte> computerResources, params string[] credentials)
{
throw new NotImplementedException();
}
public float CalculateMass(string gConstant, float objectWeight)
{
throw new NotImplementedException();
}
public Physics PhysicsDepartment { get; set; }
}
public class Task
{
int TaskId { get; set; }
string TaskName { get; set; }
}
interface IEngineerTask
{
int DoPhysics();
Delegate Resources(Dictionary<int, byte> computerResources, params string[] credentials);
float CalculateMass(string gConstant, float objectWeight);
Physics PhysicsDepartment { get; set; }
}
public enum Physics
{
QuantuamMechanics, StringTheory, NewtonianGravity, GeneralRelativy, SpecialRelatvity
}
Klassen ...
public class FullTimeEmployee
{
}
... kan ju utelämna interfacet IEngineerTask samtidigt som klassen ser likadan ut med precis samma class members:
//IEngineer is omited
public class FullTimeEmployee : Person
{
double MaxWorkingHours { get; set; }
List<Task> Tasks { get; set; }
public int DoPhysics()
{
throw new NotImplementedException();
}
public Delegate Resources(Dictionary<int, byte> computerResources, params string[] credentials)
{
throw new NotImplementedException();
}
public float CalculateMass(string gConstant, float objectWeight)
{
throw new NotImplementedException();
}
public Physics PhysicsDepartment { get; set; }
}
Detta väcker liksom funderingar och frågetecken varför Interfaces används Nån som kan klargöra konceptet med det? Har liksom IEngineerTask en mer "beskrivande" syfte som t.ex. särskiljer en FullTimeEmployee som implementerar t.ex. en ISalesTask?