My script is dedicated to the development of mathematical problems. As an IProblem interface, I thought the two main properties that it should contain are QuestionText and Response . QuestionText will always be a string, but a Response can sometimes be a complex object (a custom Fraction struc) or another data type, such as string, decimal, int, etc.
public interface IProblem { string QuestionText { get; set; } object Response { get; } bool IsComplete(); bool IsCorrect(); }
As you can see, Response is an object. I guessed that this data type, because all problems by nature have an answer. And since this is an object, I determine only to receive for future errors (problems with casting).
My idea is later, in a particular class, to access this property ( Response ), without having to throw. Check this?
public abstract class Problem : IProblem { public string QuestionText { get; set;} public object Response { get; protected set; } public virtual bool IsComplete() { return true; } public abstract bool IsCorrect(); } public class BinaryProblem : Problem { public decimal N1 { get; set; } public decimal N2 { get; set; } public decimal Response { get { return (decimal)base.Response; } set { base.Response = value; } } public override bool IsCorrect() { return N1 + N2 == Response; } }
And here I am testing the value.
static void Main(string[] args) { BinaryProblem p = new BinaryProblem(); p.N1 = 2; p.N2 = 4; p.Response = 6; IProblem p2 = p; Console.WriteLine(p2.Response); Console.WriteLine(p2.IsComplete().ToString()); }
It still works, but I want to know if I am doing what I am doing, or good practice. I have seen other people use the new operator for this. Others do not use the word base .
Is this a good way? Could this be the cause of future errors? Please give me feedback on my design.
EDIT: It really is necessary to access the answer in a non-generic interface.
design c # oop uml object-oriented-analysis
Darf zon
source share