Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialAmit Ghosh
9,314 PointsWhen to use a Field vs a Property
Is there a clear guideline when to use a field vs a property. In the examples of Repository pattern, I can get away with creating a private Context field in the base class controller and use that in derived class controllers and pass a copy to the repository class.
I want to understand when to use Context property over a field and what is the thought process of choosing one over the other.
Thanks, Amit.
3 Answers
Steven Parker
231,271 PointsI would not expect that you could access a private field from a derived class! But fields should only be private, and properties should use when access is to be allowed outside of the class.
For other info about using fields vs. properties, see the MDN Design Guidelines for Field Design and Property Design.
Amit Ghosh
9,314 PointsSteven let me ask the question in a different manner.
While creating class hierarchy what is the preferred way to defining the attributes being used by the derived classes:
For ex:
Approach 1:
public abstract class BaseController: Controller
{
protected Context _context = null;
public BaseController()
{
_context = new Context();
}
}
Approach 2:
public abstract class BaseController: Controller
{
protected Context Context {get; set;};
public BaseController()
{
Context = new Context();
}
}
I have implemented the logic both ways and its produces expected results. So the question is when to use which one and why?
Is this what should be followed: fields should only be private, and properties should use when access is to be allowed outside of the class.
Steven Parker
231,271 PointsSee the comment added to my answer.
Amit Ghosh
9,314 PointsThanks Steven
Steven Parker
231,271 PointsAmit Ghosh — Glad to help. You can mark a question solved by choosing a "best answer".
And happy holidays! :christma_tree:
Steven Parker
231,271 PointsSteven Parker
231,271 PointsYour first example creates a field with protected access, this would not in accordance with the "best practice" recommendations. The second example would be the preferred implementation.