Руководство C# Property
1. C# Property
Property (Свойство) является членом (member) класса, интерфейса. Это расширение поля. Property позволяет вам получить доступ к полю или изменить значение этого поля без необходимости прямого доступа к полю.
Вы можете создать Property, только разрешающий доступ к полю (field), не позволяя изменять значение поля, и наоборот. Это самая сильная сторона одного Property.
С полем (field), если вы можете получить к нему доступ извне, вы также можете изменить его значение, это, очевидно, опасно, рассмотрим следующий пример:
Вы можете создать Property, только разрешающий доступ к полю (field), не позволяя изменять значение поля, и наоборот. Это самая сильная сторона одного Property.
С полем (field), если вы можете получить к нему доступ извне, вы также можете изменить его значение, это, очевидно, опасно, рассмотрим следующий пример:
Employee.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpPropertyTutorial
{
class Employee
{
// Чтобы получить доступ снаружи,
// данное поле (field) должно бытьi 'public' или 'protected'.
public string code;
// Чтобы получить доступ снаружи,
// данное поле (field) должно бытьi 'public' или 'protected'.
public string name;
public Employee(string code, string name)
{
this.code = code;
this.name = name;
}
}
class EmployeeTest
{
public static void Main(string[] args)
{
// Создать объект Employee.
Employee john = new Employee("E01", "John");
// Вы можете получить доступ в имя сотрудника
// (name является полем public поэтому вы можете получить доступ снаружи).
Console.WriteLine("Employee Name = " + john.name);
// Но вы так же можете прикрепить новое значение для поля name.
// (Это явно опасно).
john.name = "Marry";
Console.WriteLine("Employee Name = " + john.name);
Console.Read();
}
}
}
Property - это решение проблемы, о которой говорилось выше. Ниже пример, в котором используются Property Code, Name для доступа к полю code, name класса Employee2.
Employee2.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpPropertyTutorial
{
class Employee2
{
// Данное поле является private,
// оно не позволяет получить доступ снаружи.
private string code;
// Данное поле является private,
// оно не позволяет получить доступ снаружи.
private string name;
// Объявить property, как public, можено получить дступ снаружи.
public string Code
{
get
{
return this.code;
}
set
{
// 'value' является особым ключевым словом,
// которое означает значение, только что прикрепленное для property.
this.code = value;
}
}
// Объявить property, как public, позволяющее получить доступ,
// но не позволяет прикреплять новое значение.
public string Name
{
get
{
return this.name;
}
}
public Employee2(string code, string name)
{
this.code = code;
this.name = name;
}
}
}
Test:
Employee2Test.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpPropertyTutorial
{
class Employee2Test
{
public static void Main(string[] args)
{
// Создать объект Employee.
Employee2 john = new Employee2("E01", "John");
Console.WriteLine("Employee Code = " + john.Code);
Console.WriteLine("Employee Name = " + john.Name);
Console.WriteLine("-------");
// Прикрепить новое значение property Code.
john.Code = "E02";
// Невозможно прикрепить новое значение для property Name.
// john.Name = "Marry"; // ==> Error!
Console.WriteLine("Employee Code = " + john.Code);
Console.WriteLine("Employee Name = " + john.Name);
Console.Read();
}
}
}
Запуск примера:
Employee Code = E01
Employee Name = John
------
Employee Code = E02
Employee Name = John
2. Абстрактный Property (Abstract Property)
Property используется для set (установки) и get (получения) значения поля, по сути рассматривается как особенный метод, поэтому его также можно объявить абстрактным (abstract), и он будет выполнен (implements) в подклассе. Класс имеет Property, объявленное как абстрактное, оно должно быть объявлено абстрактным. Абстрактные свойства также могут быть объявлены в интерфейсе.
Animal этокласс который объявляет две абстрактные свойства: Name & Age (имя и возраст):
Animal.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpPropertyTutorial
{
abstract class Animal
{
// Абстрактное property (abstract Property).
public abstract string Name
{
get;
}
// Абстрактное property имеет set & get.
public abstract int Age
{
get;
set;
}
}
}
Класс Cat расширяется от Animal и выполняет абстрактные свойства, объявленные в Animal.
Cat.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpPropertyTutorial
{
class Cat : Animal
{
private string name;
private int age;
// Выполнить абстрактное property объявленное в классе Animal.
public override string Name
{
get
{
return this.name;
}
}
// Выполнить абстрактное property объявленное в классе Animal.
public override int Age
{
get
{
return this.age;
}
set
{
this.age = value;
}
}
// Constructor.
public Cat(string name, int age)
{
this.name = name;
this.age = age;
}
}
}
Property в Interface
Вы также можете объявить Property в интерфейсе, эти свойства будут выполнены (implements) в подклассе.
IColor.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpPropertyTutorial
{
interface IColor
{
// Абстрактное property у Interface.
String Color
{
get;
}
}
}
Класс Ball выполняет интерфейс IColor, он выполняет (implements) абстрактные свойства, объявленные в IColor.
Ball.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpPropertyTutorial
{
class Ball : IColor
{
private string color;
// Выполнить property объявленное в Interace IColor
// (Нельзя написать ключевое слово override здесь,
// так как выполняет property у Interface).
public string Color
{
get
{
return this.color;
}
}
// Constructor.
public Ball(String color)
{
this.color = color;
}
}
}
Pуководства C#
- Наследование и полиморфизм в C#
- Что мне нужно для начала работы с C#?
- Быстрый обучение C# для начинающих
- Установите Visual Studio 2013 в Windows
- Абстрактный класс и Interface в C#
- Установите Visual Studio 2015 в Windows
- Сжатие и декомпрессия в C#
- Руководство по программированию многопоточности C#
- Руководство C# Delegate и Event
- Установите AnkhSVN в Windows
- Программирование C# для группы использующей Visual Studio и SVN
- Установить .Net Framework
- Access Modifier (Модификатор доступа) в C#
- Руководство C# String и StringBuilder
- Руководство C# Property
- Руководство C# Enum
- Руководство C# Structure
- Руководство C# Generics
- Обработка исключений для C#
- Руководство C# Date Time
- Манипулирование файлами и каталогами в C#
- Руководство CSharp Streams - двоичные потоки в C#
- Руководство Регулярное выражение C#
- Подключиться к базе данных SQL Server в C#
- Работа с базой данных SQL Server на C#
- Подключиться к базе данных MySQL в C#
- Работа с базой данных MySQL на C#
- Подключиться к базе данных Oracle в C# без Oracle Client
- Работа с базой данных Oracle на C#
Show More