c# - Override property or calculate property in constructor -


for example have base class , need property calculated in derived classes.i have 2 variant (someproperty1 , someproperty2):

public class baseclass {     public int someproperty1{get;set;}     public override int someproperty2{get;set;} }  public class derivedclass : baseclass {     public derivedclass()     {        someproperty1 = 100;     }     public override int someproperty2     {                 {             return 100;         }     } } 

the questions best way, someproperty1 or someproperty2?

add base class protected abstract method called calcsomeproperty().

then implement property in terms of calcsomeproperty(). force derived classes implement it.

for example:

public abstract class baseclass {     public int someproperty     {                 {             return calcsomeproperty();         }     }      protected abstract int calcsomeproperty(); } 

alternatively, can make property abstract:

public abstract class baseclass {     public abstract int someproperty { get; } } 

in either case, forcing derived classes implement property calculation.

an advantage of separating calculation protected method (rather using simpler abstract property) can perform caching in concrete property implementation if calculation slow:

public abstract class baseclass {     protected baseclass()     {         _someproperty = new lazy<int>(calcsomeproperty);     }      public int someproperty     {                 {             return _someproperty.value;         }     }      protected abstract int calcsomeproperty();      private readonly lazy<int> _someproperty; } 

Comments

Popular posts from this blog

Delphi XE2 Indy10 udp client-server interchange using SendBuffer-ReceiveBuffer -

Qt ActiveX WMI QAxBase::dynamicCallHelper: ItemIndex(int): No such property in -

Enable autocomplete or intellisense in Atom editor for PHP -