TOC

This article is currently in the process of being translated into Polish (~54% done).

Klasy:

Pola

Jednym z najbardziej podstawowych elementów klasy są pola. Działają one podobnie jak zmienne, o których mówiliśmy poprzednio, ale są zdefiniowane na poziomie klasy, a nie metody. Różnica ta jest bardzo ważna, ponieważ wprowadza koncepcję "zasięgu widoczności" (ang. "scopes"), czyli decyduje skąd możemy uzyskać dostęp do zmiennej: zmienna lokalna (definiowana wewnątrz metody) jest dostępna tylko w tej konkretnej metodzie, podczas gdy pole klasy może być dostępne we wszystkich metodach tejże klasy, a nawet wewnątrz metod innych klas, jeżeli tylko widoczność na to pozwala.

Innymi słowy - różnica między zmienną, a polem opiera się na miejscu deklaracji. Zmienna zadeklarowana na poziomie klasy nazywana jest polem, podczas gdy zmienna zadeklarowana na poziomie metody jest po prostu zmienną.

Fields are often declared near the top of the class and their visibility are often set to private (we'll discuss visibility later in this chapter). It could look like this:

public class FieldsSample
{
	private string name;
	....

Posiadamy teraz zmienną na poziomie klasy o nazwie "name", która jest dostępna dla wszystkich metod tej klasy. Nie jest ona jednak dostępna z zewnątrz, gdyż określiliśmy ją jako prywatną - private. Możesz określić swoje pola jako protected (chronione) jeśli chcesz mieć do nich dostęp z klas pochodnych, lub nawet jako public (publiczne), jeśli chcesz korzystać z nich z dowolnego miejsca. Warto jednak pamiętać, że często najlepszym sposobem jest korzystnie z pól przy pomocy właściwości, o których porozmawiamy w następnym artykule.

W przykładzie powyżej, zmienna "name" nie posiada początkowej wartości, znaczy to, że musisz przypisać jej jakąś wartość zanim będziesz mógł jej użyć. Jeżeli wiesz jaką wartość początkową powinna mieć zmienna, możesz łatwo przypisać jej wartość w momencie deklaracji.

public class FieldsSample
{
	private string name = "John Doe";
	....

Alternatywnie możesz przypisać wartość pola w konstruktorze klasy. Nadpisze to jakąkolwiek wartość która była przypisana przy deklaracji i pozwoli na przypisywanie wartości dynamicznie.

As we talked about previously, members of a class can be accessed with the dot-notation, like "class.member". However, when we are accessing a member of the current class, we use the "this" keyword, like "this.member". Here's a more complete example where we declare a couple of fields and use them inside a method:

public class Fields1
{
	private string name = "John Doe";
	private int age = 42;

	public void Describe()
	{
		string description = this.name + " is " + this.age + " years old...";
		Console.WriteLine(description);
	}
}

In the Describe() method (and don't worry, we'll get to methods in one of the next articles) we declare a local variable called "description", with a value based on our two declared fields. The "description" variable is a great example of a variable which should always be a variable and never a field: It's temporary and only relevant to the method which uses it, where the fields could easily be relevant in other methods of the class.

Summary

Fields act a bit like global variables because they can be used to store data which can then be accessed from anywhere inside the class. They can be accessed from outside the declaring class as well, but normally, properties are used for this purpose. We'll talk about properties in the next article.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!