Widzę, że jakiś kod zwróci domyślną wartość, więc zastanawiam się nad klasą zdefiniowaną przez użytkownika, w jaki sposób kompilator zdefiniuje jej domyślną wartość?Wartość domyślna dla klasy zdefiniowanej przez użytkownika w C#
Odpowiedz
Aby dostroić się do reszty, to będzie null
, ale należy również dodać, że można uzyskać domyślną wartość dowolnego typu, przy użyciu default
default(MyClass) // null
default(int) // 0
Może to być szczególnie przydatne podczas pracy z rodzajowych ; możesz chcieć zwrócić default(T)
, jeśli twój typ zwrotu to T
i nie chcesz założyć, że jest on zerowy.
+1 Istnieje pełne wyjaśnienie domyślnego słowa kluczowego pod adresem http://msdn.microsoft.com/en-us/library/xwth0h0d%28VS.80%29.aspx –
Domyślna wartość class
jest null
Jeśli jest to rodzaj odniesienia, wartość domyślna będzie null
, jeśli jest to typ wartości, to zależy.
Assert.IsTrue(default(MyClass) == null);
jest celem tego stwierdzenia? –
Uwaga: Wartość DefaultValueAttribute nie spowoduje automatycznego inicjowania elementu z wartością atrybutu. Musisz ustawić wartość początkową w swoim kodzie.
Możesz udekorować swoje nieruchomości za pomocą DefaultValueAttribute.
private bool myVal=false;
[DefaultValue(false)]
public bool MyProperty {
get {
return myVal;
}
set {
myVal=value;
}
}
Wiem, że to nie odpowiada na twoje pytanie, chciałem tylko dodać to jako odpowiednią informację.
Więcej informacji można znaleźć http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx
Jak mówi strona, DefaultValue jest po prostu czymś używanym przez projektanta wizualnego VS. To naprawdę zupełnie nie ma związku z faktyczną inicjalizacją; to tylko "podpowiedź" tego, jak należy ją zainicjować. – Nyerguds
Wartość domyślna dla klas jest null
. W przypadku struktur wartość domyślna jest taka sama, jak w przypadku tworzenia domyślnego konstruktora bez parametrów struktury (którego nie można przesłonić). Ta sama reguła jest stosowana rekursywnie do wszystkich pól zawartych w klasie lub strukturze.
Jeśli chcesz w jakiś sposób zdefiniować domyślną wartość inną niż null dla typu odniesienia, uświadom sobie, że nie ma sensu, aby typ odniesienia miał wartość domyślną. W pewnym momencie odniesienie musiałoby wskazywać na przydzieloną pamięć dla konstruowanego obiektu. Aby było to możliwe, wyobrażam sobie dwie implementacje:
zdefiniować statyczną instancję jako domyślną: to może działać, ale prawdopodobnie wymagać naprawdę przylegający sposób jakoś zidentyfikować do kompilatora, gdzie uzyskać instancję statycznej. Naprawdę nie jest to funkcja warta umieszczenia w języku.
Pozwól wywołanie konstruktora domyślnego za każdym razem wartość domyślna wystąpił w wyrażeniu: to byłoby straszne, bo teraz trzeba się martwić o dwóch wartości domyślnych może być nierówna, ponieważ nie zastępują Równa się nie porównać odniesień i również straszne ze względu na wydajność pamięci i wydajność przydzielania pamięci, a strona wpływa z konstruktora.
Podsumowując, uważam, że jest to funkcja językowa, której naprawdę nie chcemy. Domyślnie (MyClass) zawsze będzie == null.
chciałbym zrobić pole niż nieruchomości, jak to wygląda jak System.String.Empty
„domyślny” instancję klasy:
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
public static readonly Person Default = new Person()
{
Name = "Some Name",
Address = "Some Address"
};
}
...
public static void Main(string[] args)
{
string address = String.Empty;
Person person = Person.Default;
//the rest of your code
}
- 1. Funkcja skrótu dla klasy zdefiniowanej przez użytkownika. Jak się zaprzyjaźnić? :)
- 2. Klasy ES6 Wartość domyślna
- 3. Tworzenie zdefiniowanej przez użytkownika klasy std :: to_string (stanie)
- 4. Jaka jest wartość domyślna dla członków klasy C++?
- 5. Wartość domyślna dla bool w C#
- 6. celem-c domyślna metoda init dla klasy?
- 7. C#, domyślna wartość parametru dla IntPtr
- 8. wywoływanie funkcji zdefiniowanej przez użytkownika z parametrami
- 9. Wartość domyślna preferencji Androida
- 10. Wykorzystanie Domyślna wartość enum C++
- 11. combobox wartość domyślna winforms C#
- 12. JSTL - Używanie forEach do iterowania po klasie zdefiniowanej przez użytkownika
- 13. Wartość domyślna dla boost :: shared_ptr na konstruktora klasy
- 14. Załaduj klejnotu ruby do przestrzeni nazw zdefiniowanej przez użytkownika
- 15. Wartość domyślna maxConcurrentOperationCount dla NSOperationQueue
- 16. użyciu zdefiniowanej przez użytkownika funkcji bash w xargs
- 17. Jak zaimplementować zestaw o zdefiniowanej przez użytkownika równości
- 18. domyślna widoczność członków/członków klasy C++
- 19. wartość domyślna dla słownika w jinja2 (ansible)
- 20. Wartość domyślna dla pola w modelu Django
- 21. Wartość domyślna dla parametrów funkcji w VB6
- 22. Wartość domyślna dla TextBoxFor w ASP.NET MVC
- 23. Wartość domyślna typu dynamicznego?
- 24. Wartość domyślna typu w Runtime
- 25. Domyślna wartość właściwości statycznej
- 26. Jak "przejść do definicji" dla funkcji zdefiniowanej przez użytkownika w Leksah?
- 27. System.Security.HostProtectionException podczas wykonywania funkcji zdefiniowanej przez użytkownika na serwerze SQL
- 28. Wywołanie zdefiniowanej przez użytkownika procedury przechowywanej z instrukcji select mysql
- 29. Parametr powershell wartość domyślna (cmdlet C#)
- 30. Python argparse: wartość domyślna lub podana wartość
prostu do wyjaśnienia: wszystkie klasy (w tym te, które Ci utworzyć) domyślnie 'null'. Typy wartości liczbowych będą miały domyślnie wartość zero, a struktury są definiowane przez implementację (wartości ustawiane są w konstruktorze). –
W rzeczywistości, struktury mają domyślny domyślny konstruktor, którego nie można przesłonić, z którego zeruje się pamięć używana przez strukturę, więc domyślną wartością jest nadal zdefiniowany kompilator, a nie zdefiniowana implementacja. –
Ważne rozróżnienie: _Klasy członkowskie_ są inicjowane z domyślną wartością. Niezainicjowane zmienne funkcji lokalnych powodują tylko błędy kompilatora;) – Nyerguds