C # рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрддреЛрдВ рдХрд╛ рдкреВрд░рд╛ рдЫрд┐рдкрд╛рдирд╛

рдкрд╣рд▓реЗ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ C # рдореЗрдВ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реЗ рд▓реЗрдЦ рдХреЛ "рдШреБрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ"ред рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рдЪрдп рдореЗрдВ рджреЗрд░реА рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рдирд┐рдЬреА рдпрд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧреБрдг рдбреЗрдЯрд╛ рдХреЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  1. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  2. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  3. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  4. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  5. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  6. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  7. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  8. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  9. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  10. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  11. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  12. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  13. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  14. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  15. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
  16. class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .
class Car { const double MINIMAL_SPEED = 0d; const double MAX_KNOWN_CAR_SPEED = 1229.78d; private double maxSpeed; public double MaxSpeed { get { return maxSpeed; } set { if ( value < MINIMAL_SPEED || value > MAX_KNOWN_CAR_SPEED) throw new ArgumentOutOfRangeException( "MaxSpeed" ); maxSpeed = value ; } } } * This source code was highlighted with Source Code Highlighter .

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдореЗрдВ рд╣реА рдореВрд▓реНрдп рд╣реЛред рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдХреНрд╕рд╕реНрдкреАрдб рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗрд╡рд▓ рдХрд╛рд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдЧрд▓рдд рдЧрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдореИрдХреНрд╕рд╕реНрдкреАрдб рдХреНрд╖реЗрддреНрд░ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддреА рд╣реИред рдХрд╛рд░ рд╡рд░реНрдЧ рдХреА рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдВ рдФрд░ рдЧреБрдг рдЕрдзрд┐рдХрддрдо рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрднреА-рдХрднреА рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдпрд╣ рдЦрддрд░рдирд╛рдХ рд╣реЛрддрд╛ рд╣реИред рдХрд╛рд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдЦрддрд░рдирд╛рдХ) рдлреИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВ:
  1. рдХреНрд▓рд╛рд╕ рдХрд╛рд░
  2. {
  3. // ...
  4. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдХрд╛рд░ CreateRandomCar ()
  5. {
  6. рдирдИ рдХрд╛рд░ рд▓реМрдЯрд╛рдПрдВ ()
  7. {
  8. рдореИрдХреНрд╕рд╕реНрдкреАрдб = ( рдирдпрд╛ рд░реИрдВрдбрдо ())ред рдиреЗрдХреНрд╕реНрдЯ рдбрдмрд▓ () * рдбрдмрд▓ред рдореИрдХреНрд╡рд▓реНрдпреВ,
  9. };
  10. }
  11. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХрддрдо MAX_KNOWN_CAR_PEPEED рдХреЗ рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рдЧрддрд┐ рд╡рд╛рд▓реА рдорд╢реАрди рдмрдирд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рд░реНрдп рдХреЛрдб рдХреЗ рдмрд╛рд╣рд░реА рд╕реЗ рдХрд╛рд░ рддрдХ рдФрд░ рдХрд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рд╣реА рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдЪрд░ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рднрд▓реЗ рд╣реА рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реЛред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореВрд▓реНрдп рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ред рдпрд╣ рджреБрдЦрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдХреНрд╕рд╕реНрдкреАрдб рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдмрдЬрд╛рдп рдореИрдХреНрд╕рд╕реНрдкреАрдб рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдореИрдВрдиреЗ рдЦреБрдж рджреЗрдЦрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реВрдВред

рдирд┐рд░реНрдгрдп


рдЯреНрд░реВ-рдУрдУрдкреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИ - рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреА рдЧрддрд┐ рдФрд░ рдкреВрд░реЗ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдореИрдХреНрд╕рд╕реНрдкреАрдб рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЧреМрд░реИрдпрд╛ рдкрд░ рдПрдХ рддреЛрдк рд╕реЗ рд╢реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рди рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рд╢реБрд░реВ рдХрд░рдирд╛ рдПрдХ рд╢реМрдХрд┐рдпрд╛ рд╢реИрд▓реА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдмрд╕реЗ рд╕рд╛рдл рд╣реИред

рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдФрд░ рдореБрдЭреЗ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ред рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рдФрд░ рдХреБрдЫ рд╕реАрдорд╛рдПрдВ рд╣реИрдВред рддреЛ, рдиреАрдЪреЗ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдРрд╕реЗ рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдРрд╕реЗ "рд╕рдорд╕реНрдпрд╛" рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ HidingProperty <T>
  2. {
  3. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ T1 рдЧреЗрдЯреНрдЯрд░ <T1> ( Ref T1 currentValue);
  4. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╢реВрдиреНрдп рд╕реЗрдЯрд░ <T2> ( рд░реЗрдлрд░реА T2 currentValue, T2 newValue);
  5. рдирд┐рдЬреА рдЯреА _storedValue;
  6. рдирд┐рдЬреА рдЧреЗрдЯреНрдЯрд░ <T> _getter;
  7. рдирд┐рдЬреА рд╕реЗрдЯрд░ <T> _setter;
  8. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЫреБрдкрд╛рддрд╛ (рдЧреЗрдЯреНрдЯрд░ <рдЯреА> рдЧреЗрдЯреНрдЯрд░, рд╕реЗрдЯрд░ <рдЯреА> рд╕реЗрдЯрд░)
  9. : рдпрд╣ ( рдбрд┐рдлрд╝реЙрд▓реНрдЯ (T), рдЧреЗрдЯреНрдЯрд░, рд╕реЗрдЯрд░) {}
  10. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЫреБрдкрд╛рдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛ (рдЯреА initialValue, рдЧреЗрдЯреНрдЯрд░ <рдЯреА> рдЧреЗрдЯреНрдЯрд░, рд╕реЗрдЯрд░ <рдЯреА> рд╕реЗрдЯрд░)
  11. {
  12. _storedValue = initialValue;
  13. _getter = getter;
  14. _setter = рд╕реЗрдЯрд░;
  15. }
  16. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рд╕реЗрдЯ (T newValue)
  17. {
  18. _setter ( рд░реЗрдл _storedValue, newValue);
  19. }
  20. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ T Get ()
  21. {
  22. рд╡рд╛рдкрд╕реА _getter (Ref_storedValue);
  23. }
  24. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
  1. рдирд┐рдЬреА HidingProperty < double > NewMaxSpeed тАЛтАЛ= new HidingProperty < double > ()
  2. ( рд░реЗрдл рдбрдмрд▓ рдХрд░реЗрдВрдЯрд╡реИрд▓реНрдпреВ) => {рдХрд░реЗрдВрдЯрд╡реИрд▓реНрдпреВ рдкрд░ рд▓реМрдЯреЗрдВ; }
  3. ( рд░реЗрдл рдбрдмрд▓ рдХрд░рдВрдЯрд╡реИрд▓реНрдпреВ, рдбрдмрд▓ рдиреНрдпреВрд╡реИрд▓реНрдпреВ) =>
  4. {
  5. рдЕрдЧрд░ (newValue <MINIMAL_SPEED || newValue> MAX_KNOWN_CAR_PEPE)
  6. рдирдИ ArgumentOutOfRangeException ( "рдиреНрдпреВрдореИрдХреНрд╕рд╕реНрдкреАрдб" ) рдлреЗрдВрдХреЗрдВ ;
  7. currentValue = newValue;
  8. }
  9. );
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЖрдкрдХреЛ рдЧреЗрдЯ () рдФрд░ рд╕реЗрдЯ () рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдП рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
var currentSpeed тАЛтАЛ= mazda.NewMaxSpeed.Get ()
mazda.NewMaxSpeed.Set (currentSpeed тАЛтАЛ+ 10d);

рд╣рд╛рдБ, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВред рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдПрдХ рд╕реБрдкрд░ рд╕реЗрдХреНрд╕реА рдХреЛрдб рдирд╣реАрдВ рд╣реИред рдлрд╝реАрд▓реНрдб рдЙрджрд╛рд╣рд░рдг рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд░рдХреНрдд рдХреЗ рд╕рд╛рдеред рдЕрдм, рдЬрдм NewMaxSpeed тАЛтАЛрдХреЛ рдХрд╛рд░ рдХреЗ рдмрд╛рд╣рд░ рдФрд░ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣реА рдЪреЗрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛ рдореЗрдВ рдирдП рдореВрд▓реНрдп рдХреА рдШрдЯрдирд╛ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдиреБрдХрд╕рд╛рди, рд╕реАрдорд╛рдПрдВ, рджреБрд╖реНрдкреНрд░рднрд╛рд╡


рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░рд╛ рд╕рд╣рдХрд░реНрдореА рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рддрд░рд╣ рдХреБрдЫ рджреЗрдЦрддрд╛ рд╣реИ:
  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбрдмрд▓ рд╕реНрдкреАрдб
  2. {
  3. рджреЛрд╣рд░реА рдЧрддрд┐;
  4. { // getter code } рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  5. рд╕реЗрдЯ { // рд╕реЗрдЯрд░ рдХреЛрдб }
  6. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╡рд╣реА рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдореИрдВрдиреЗ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕реАрдзреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреЗрдЯ рдЧреЗрдЯ, рд╕реЗрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрднреА рдЗрд╕ рдкрд░ рдХрд╛рдмреВ рдирд╣реАрдВ рдкрд╛рдпрд╛ред рдпрджрд┐ рд╣рдо рдирд┐рд╣рд┐рдд рдХрд▓рд╛рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдбрдмрд▓ x = рдХрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред MaxSpeed; рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рддреЛ рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░реЗрдВред рдореИрдХреНрд╕рд╕реНрдкреАрдб = 10 рдбреА; рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЬреБрдбрд╝реА рдПрдХ рдЕрдиреНрдп рдмрддрдЦ, рдЧрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдЛрдг рд╣реИред

рдореИрдВрдиреЗ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ / рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореБрд╢реНрдХрд┐рд▓реЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдЗрдВрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдХреЗрд╡рд▓ HidingProperty рд╡рд░реНрдЧ рдкрд░ Serializable рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд╣рдпреЛрдЧреА рдФрд░ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдХрд┐рддрдиреА рдмрд╛рд░ рдЖрдПрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдХреЛрдб рдХреА рд╢реИрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЫреВрддрд╛ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдореИрдВ рд╣реЛрдорд╡рд░реНрдХ рдореЗрдВ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдирд┐рд░реНрдгрдп рдФрд░ рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/In116234/


All Articles