Properties

Similar to fields but give more control to getting and setting value without exposing internal details to the user property. Get accessor runs when property is read, returns a value.
Set accessor is to assign to property, and has implicit parameter named value.

public class Stock
{
    decimal currentPrice; // The private "backing" field
    public decimal CurrentPrice // The public property
    {
        get { return currentPrice; }
        set { currentPrice = value; }
    }
}

Modifiers

  1. Static : static
  2. Access modifiers: public, internal, private, protected
  3. Inheritance modifiers: new, virtual, abstract, override, sealed
  4. Unmanaged: unsage, extern

Read-only and calculated properties

  • A property is read-only if it specifies only a get accessor.
  • A property typically has a dedicated backing field to store the underlying data.
  • Property can also be computed from other data.
decimal currentPrice, sharesOwned;

public decimal Worth
{
     get { return currentPrice * sharesOwned; }
}

Expression-bodied properties

Expression-bodied property can declare read-only property.

public decimal Worth => currentPrice * sharesOwned;

Automatic properties

An automatic property declaration instructs the compiler to provide this implementation. The compiler automatically generates private backing field that cannot be referred.

public class Stock
{
...
    public decimal CurrentPrice { get; set; }
}

Property initializers (C# 6)

You can add a property initializer to automatic properties.

public decimal CurrentPrice { get; set; } = 123;

Properties with an initializer can be read-only

public int Maximum { get; } = 999;

get and set accessibility

The get and set accessors can have different access levels.

public class Foo
{
   private decimal x;
   public decimal X
   {
      get { return x; }
      private set { x = Math.Round (value, 2); }
   }
}

CLR property implementation

property accessors internally compile to methods called get_XXX and set_XXX:

public decimal get_CurrentPrice {...}
public void set_CurrentPrice (decimal value) {...}

Leave a Reply

Your email address will not be published. Required fields are marked *