Jest logicznie niemożliwe, aby nie miał wartości. Będzie musiał zwrócić coś, kilka paczek 1s i 0, co najmniej jest uważane za odniesienie do Tuple<String, String>[]
, więc w tym zakresie ma wartość.
To także zdarza się, że wszystkie pola w klasach gotowi do ich wartości domyślnych (default(T)
dla każdego typu T
są, co jest null
dla wszystkich typów referencyjnych). W przeciwnym razie możliwe byłoby posiadanie obiektu, który był w stanie, który nie tylko nie miałby sensu pod względem tego, co robi, ale który nie miał żadnego sensu przez reguły tego, co .NET oczekuje, że obiekty wykonają. Obejmuje to ukryte pola za właściwościami automatycznymi.
Teraz, w niektórych językach możemy zrobić odpowiednik tego:
public Tuple<String, String>[] Breadcrumbs
{
get
{
Tuple<String, String>[] whatIWillSend;
return whatIWillSend;
}
}
Jeśli to pozwolono, whatIWillSend
będzie mieć wartość nie zdefiniowaną przez dowolną concious decyzji z twojej strony, ale przez to, co stało się w pamięci w tym czasie. Może to być wartość pusta, może być poprawna Tuple<String, String>[]
przez zwykły zbieg okoliczności (ale nie ten, którego chciałeś użyć!), może to być Dictionary<int, List<string>>
, że środowisko wykonawcze będzie teraz uważało, że w rzeczywistości jest to Tuple<String, String>[]
(nie ma bezpieczeństwa typowego dla całego systemu), może to być jedna czwarta struktury decimal
. (W językach, które dopuszczają takie rzeczy, może to być również dobrze znana wartość, że debuggery dla takich języków są ustawiane właśnie w takich przypadkach, aby pomóc znaleźć błędy spowodowane przez to).
To jest najbliższa rzecz, jaką możemy dostać do nieruchomości, która nie ma wartości. Należy jednak pamiętać, że:
- Wartość nadal będzie miała wartość, ale nie będzie miała znaczącej wartości.
- Nie możemy tego robić w C#.
+1 za "niewypowiedziane imię" :) –