поле

Поле — это обычная переменная.
Поле в классе можно сразу инициализировать, т.е. присвоить ему значение.

Модификаторы поля:
  • public
  • private
  • protected
  • internal
  • new
  • static
  • readonly

public

Модификатор public позволяет получить доступ к этому полю из любого места кода программы, включая методы, определенные в других классах.
На практике это не рекомендуется. Доступ к полям должен осуществляться с помощью свойств, методов или индексаторов.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  public int val;
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One();
  •   O.val = 10;
  •   Console.WriteLine(O.val);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
10

private

Установлен по умолчанию, поэтому явно его объявлять не обязательно.
Модификатор private позволяет получить доступ к этому полю только методам, определенным внутри этого класса.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  private int a;
  •  //модификатор private установлен по умолчанию, поэтому явно его объявлять не обязательно
  •  int b;
  •  public One(int arg0, int arg1) {
  •   a = arg0;
  •   b = arg1;
  •  }
  •  //доступ к полю имеют только члены, определенные внутри класса
  •  public int Sum() {
  •   return (a + b);
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One(5, 10);
  •   Console.WriteLine(O.Sum());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
15

protected

Модификатор protected позволяет получить доступ к этому полю методам, определенным внутри этого класса, а также методам производного класса.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • //базовый класс
  • class Base {
  •  protected int val = 10;
  • }
  •  
  • //производный класс
  • class One : Base {
  •  int a;
  •  public One(int arg) {
  •   a = arg;
  •  }
  •  //доступ к полю имеют только члены, определенные внутри класса
  •  public int Sum() {
  •   //прямой доступ к полю с модификатором protected базового класса
  •   return (val + a);
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One(5);
  •   Console.WriteLine(O.Sum());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
15

internal

Модификатор internal позволяет получить доступ к полю из любого файла сборки.
Скрыть

Показать

Копировать
  One.cs  
  • class One {
  •  internal  int val = 10;
  • }
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  •  
  • class Two {
  •  int val;
  •  public Two(int arg) {
  •   val = arg;
  •  }
  •  public int getVal() {
  •   return val;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   //класс находится в другом файле
  •   One O = new One();
  •   Two T = new Two(5);
  •   Console.WriteLine(O.val + T.getVal());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
15

new

Модификатор new явно скрывает члены базового класса, которые имею такое же имя, как у члена производного класса.
Не желательно создавать имена членов в производном классе, которые соответствуют именам в базовом классе.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • //базовый класс
  • class Base {
  •  protected int val = 10;
  • }
  •  
  • //производный класс
  • class One : Base {
  •  //модификатор new явно скрывает поле с таким же именем из базового класса
  •  new int val;
  •  public One(int arg) {
  •   val = arg;
  •  }
  •  public int Sum() {
  •   //обратите ВНИМАНИЕ на доступ к полю базового типа с таким же именем
  •   return (val + base.val);
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One(5);
  •   Console.WriteLine(O.Sum());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
15

static

Модификатор static создает статический член, который принадлежит только типу, а не его объекту.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  public static int val = 10;
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   //доступ к статическом члену происходит напрямую, а не через объект
  •   Console.WriteLine(One.val);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
15

readonly

Модификатор readonly делает поле константным. В отличии от константы, его не обязательно сразу инициализировать.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  readonly int val;
  •  public One(int arg) {
  •   val = arg;
  •  }
  •  public int getVal() {
  •   return val;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One(10);
  •   Console.WriteLine(O.getVal());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
10