Shorthand Accessors and Mutators
Solution 1
Yes, Method 1 is a shortcut to Method 2. I suggest using Method 1 by default. When you need more functionality, use Method 2. You can also specify different access modifiers for get and set.
Solution 2
Yes, the Method2
is the way to go when you have a custom getter and setter function. By default when you use Method1, there will be a default private property handled internally. Please refer this URL for more details.
Sample:
string _name;
public string Name
{
get => _name;
set => _name = value;
}
Related videos on Youtube
Gravy
Updated on January 17, 2020Comments
-
Gravy over 4 years
I am learning C#, and am learning about making fields private to the class, and using Getters and Setters to expose Methods instead of field values.
Are the
get; set;
in Method 1 and Method 2 equivalent? e.g. is one a shorthand of the other?class Student { // Instance fields private string name; private int mark; // Method 1 public string Name { get; set; } // Method 2 public int Mark { get { return mark; } set { mark = value; } } }
Finally, would Method 2 be used when you want to for example perform a calculation before getting or setting a value? e.g. converting value to a percentage or perform validation? e.g.
class Student { // Instance fields private string name; private double mark; private int maxMark = 50; // Method 1 public string Name { get; set; } // Method 2 public double Mark { get { return mark; } set { if ( mark <= maxMark ) mark = value / maxMark * 100; } } }
-
Gravy almost 11 yearsAah, so you mean that I can do something like
protected set { if ( mark <= maxMark ) mark = value / maxMark * 100; }
??? -
Bikonja almost 11 yearsNote that the Name getter/setter will not return/set the private string name, but an internal variable which you do not have direct access to.
-
Gravy almost 11 yearsThanks, And am I correct in saying that I do not have to explicitly declare the fields
name
ormark
- but I can just reference the MethodsName
andMark
within the class / or outside theStudent
class? -
Robin almost 11 yearsYes, that is correct. Name and Mark are automatic properties so there is no backing field. You can reference them directly from within the class. If they are public you can reference them from outside the class as well.
-
Aaron Franke over 5 years@Robin This is false. If you delete
private int mark;
from the program, it throws errors. -
Aaron Franke over 5 yearsIs there a way to use default private properties but have a manual getter or setter for it? Also, that link is dead.
-
Saravanan over 5 yearsYes, the approach is to have a private variable that is get and set using a public property or a function. I have updated a working link and added small sample code FYR