Zmienne typu wartościowego (ValueType) są najprostszymi strukturami danych dostępnymi w frameworku .NET. W odróżnieniu od typów referencyjnych ich wartość jest przechowywana na stosie co znacznie ułatwia i przyspiesza dostęp do danych. W przypadku typów referencyjnych na stosie jest przechowywana jedynie referencja na obiekt znajdujący się na stercie (heap).
Z uwagi na to, że w sieci jest dużo informacji na ten temat przedstawię tylko ciekawostki warte zapamiętania.
Typy wartościowe możemy podzielić na trzy główne kategorie:
- Typy wbudowane
- Typy wyliczeniowe (Enumeration)
- Typy tworzone przez użytkownika (Struktury)
Wszystkie typy wartościowe są pochodnymi klasy System.ValueType. Główną cechą zmiennych tego typu jest fakt, że po przypisaniu jednej zmiennej do innej dostajemy kopię danego obiektu. Zatem po takiej operacji dostajemy dwie niezależne zmienne. Podobna sytuacja ma miejsce podczas przekazywania takich zmiennych jako parametry w funkcjach.
Domyślna implementacja metody ValueType.Equals do porównywania wartości wykorzystuje system refleksji. Nadpisanie tej metody w określonych typach może znacznie zwiększyć wydajność ich porównywania.
Typy wbudowane
Pierwszą ważną kwestią jest inicjalizacji zmiennych lokalnych, gdyż brak inicjalizacji powoduje błąd podczas kompilacji. Typy wartościowe będące polami klas nie muszą być inicjalizowany. Przy tworzeniu obiektu danej klasy mają przypisaną domyślną wartość dla danego typu.
Nazwy typów int, long, double itd są tylko aliasami na typy, odpowiednio System.Int32, System.Int64, System.Double. Wszystkie aliasy możemy zobaczyć tutaj.
Każdy typ wartościowy posiada domyślny konstruktor który możemy wywołać:
[csharp]int i = new int();
double d = new double();[/csharp]
Po wywołaniu konstruktora zostanie utworzony obiekt z domyślną wartością.
Enum
Kolejnym typem wartościowym jest typ wyliczeniowy. Domyślnym typem dla typu enumeracyjnego jest int, aby wskazać inny typ podajemy go po nazwie, do dyspozycji mamy wszystkie typy całkowite za wyjątkiem typu char
[csharp]enum Days : long { Mon=1, Tue, Wed, Thu, Fri, Sat, Sun };[/csharp]
Elementy typu wyliczeniowego możemy rzutować na typ w jakim wartości są przechowywane (w tym przypadku long) jak i możliwa jest konwersja w drugą stronę.
[csharp] long mon = (long) Days.Mon;
Days d = (Days) mon;[/csharp]
Domyślną wartością każdego typu enumeracyjnego jest 0, zatem warto o tym pamiętać przypisując wartości do poszczególnych jej elementów.
[csharp]Days days = new Days(); //Domyślny konstruktor
Days days = 0; //nie wymaga rzutowania
Days days = (Days)1; //rzutowanie wymagane
[/csharp]
Słowem kluczowym new możemy zastąpić dany typ enumeracyjny zagnieżdżony w klasie na nowy.
Flags
Aby móc typem enumeracyjnym posługiwać się jako flagami musimy dodać do niego atrybut [Flags]. Warto pamiętać aby do konkretnych elementów typu wyliczeniowego przypisać wartości będące kolejnymi potęgami 2, w przeciwnym wypadku typ może zachowywać się nie tak jak byśmy tego oczekiwali.
[csharp][Flags]
enum Colors : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4,
All = Black | Red | Green | Blue
}
[/csharp]
Struct
Struktury są typem definiowanym przez użytkownika. Struktury posiadają kilka podstawowych cech o których warto pamiętać:
- rozmiar struktury musi być nie większy niż 16 B (bajtów)
- struktura nie może posiadać bezparametrowego konstruktora
- w strukturach nie ma dziedziczenia tak jak w klasach jednakże struktura jest pochodną klasy System.Object
- sturuktua nie może być bazą dla klasy jak również struktura nie może dziedziczyć po innej strukturze lub klasie
- mimo braku dziedziczenia struktury mogą implementować interfejsy.
Dzięki atrybutom możemy określić niestandardowe rozłożenie struktury w pamięci (coś na wzór union w C/C++)
[csharp]
[StructLayout(LayoutKind.Explicit)]
struct TestExplicit
{
[FieldOffset(0)]
public long lg;
[FieldOffset(0)]
public int i1;
[FieldOffset(4)]
public int i2;
} [/csharp]
W powyższym przypadku pole lg wskazuje na ten sam obszar pamięci co pola i1 i i2. Zatem zmiana pola lg zmienia wartości pól i1 i i2, jak również zmiana pól i1 i/lub i2 zmienia wartość pole lg.
Nullable
Domyślnie do typu wartościowego nie można przypisać wartości null. Jednak platforma .NET dostarcza nam typ generyczyn umożliwiający takie przypisanie, mowa tu o strukturze Nullable<T>.
[csharp]
Nullable<int> nint = null;
int? a = null; // skrócony zapis
[/csharp]
Boxing/Unboxing
Boxing i unboxing to mechanizmy o których istnieniu warto wiedzieć. Prostym przykładem boxing’u jest poniższy kod:
[csharp]Point p = new Point();
object obj = (object)p;
p.X = 5;
Console.WriteLine(p);
Console.WriteLine(obj);
[/csharp]
Po wykonaniu tego kodu na ekranie ujrzymy:
{X=5,Y=0} {X=0,Y=0}
Jak widzimy po przypisaniu struktury typu Point do zmiennej typu object uzyskaliśmy dwa różne obiekty, a to za sprawą faktu, że przy przypisaniu struktury do zmiennej typu referencyjnego obiekt został skopiowany do sterty i uzyskaliśmy dwie kopie tego samego obiektu jedna na stosie, a drugą na stercie. W wyniku czego zmiana pierwszego nie wpływa na drugi obiekt.
Więcej informacji jak również przykładowe ilustracje przybliżające działanie mechanizmu boxingu można znaleźć w The C# Value Type and Boxing .
Wpis powstał na podstawie: Value Types, Structs Tutorial, Enumeration Types, Boxing and Unboxing, Nullable Types.
I am constantly searching online for ideas that can facilitate me. Thanks!
Heya! I just wanted to ask if you ever have any problems with hackers?
My last blog (wordpress) was hacked and I ended up losing many months of
hard work due to no backup. Do you have any methods to stop hackers?
Hi, Neat post. There’s a challenge along with your site in internet explorer,
could test this? IE nonetheless will be the market leader
and a big part of other people will miss your magnificent writing because
of this problem.
Thanks , I’ve just been looking for info about this subject for
ages and yours is the greatest I have came upon till
now. However, what about the conclusion? Are you
positive concerning the supply?
The downtown shopping section is reflective of 50’s-model architecture, financing
it a timeless classic California flair.
You can definitely see your expertise within the work you write. The sector hopes for more passionate writers like you who are not afraid to mention how they believe. Always go after your heart.
For fun, Legacy Company and Beach-House Vineyard are
both beautifully soothing ways while night fun are available at Ocean’s Eleven Casino, based right next door, to
enjoy a day!
I will immediately snatch your rss as I can not find your e-mail subscription hyperlink or newsletter service. Do you’ve any? Please permit me recognise in order that I may just subscribe. Thanks.
Keep functioning ,remarkable job!
I think this is one of the most important info for me. And i’m glad reading your article. But should remark on few general things, The website style is great, the articles is really excellent : D. Good job, cheers
My brother recommended I would possibly like this blog.
He was once entirely right. This post actually made my
day. You cann’t believe just how a lot time I had spent
for this information! Thank you!
Great write-up, I¡¦m regular visitor of one¡¦s blog, maintain up the excellent operate, and It is going to be a regular visitor for a long time.
You completed a few nice points there. I did a search on the theme and found nearly all persons will consent with your blog.
Murió en Madrid a causa de los heridas recibidas, pues fue acribillado a bayonetazos delante de la puerta de Monteleón victima de una ardid alevosía del general francés Lagrange, el cual se acercó con un pañuelo blanco en la punta de la espada como símbolo de paz y cuando estuvo a su altura, cayó sobre Daoiz los soldados del general francés, conociéndolos desde aquella fecha en Madrid Como los héroes del 2 de mayo de 1808”.
Hello there, just became alert to your blog through Google, and found that it is truly informative. I am gonna watch out for brussels. I’ll be grateful if you continue this in future. Lots of people will be benefited from your writing. Cheers!
http://china.Sdbaigu.com/member.asp?action=view&memName=ScotDrago08130918698
There is noticeably a lot to realize about this. I consider you made some good points in features also.
It’s truly very complex in this active life to listen news on TV, therefore I just use web for that reason,
and get the hottest information.
I just could not leave your site prior to suggesting that
I extremely loved the normal info a person provide on the visitors?
Is gonna be again frequently so that you can inspect new
posts
Yes! Finally something about articles.
You made some good points there. I did a search on the issue and found most people will consent with your site.
As a Newbie, I am permanently searching online for articles that can be of assistance to me. Thank you
When coming from Ho Chi Minh City you can book a
combined night-bus + boat ticket for around US$26 (including pick
up from hotel) at travel agencies.
I relish, lead to I discovered just what I used to be
taking a look for. You have ended my four day long hunt! God
Bless you man. Have a great day. Bye
Wow that was strange. I just wrote an really
long comment but after I clicked submit my comment didn’t appear.
Grrrr… well I’m not writing all that over again. Anyways, just wanted to
say superb blog!
I’m often to running a blog and i actually respect your content. The article has really peaks my interest. I’m going to bookmark your website and keep checking for brand spanking new information.
Hello! I really could have sworn I’ve gone to this site
before but after reading through some of the post I realized it’s a new comer to me.
Nonetheless, I’m definitely happy I stumbled upon it and I’ll be bookmarking and checking back often!
Pretty section of content. I just stumbled upon your weblog and in accession capital to assert that I acquire actually enjoyed account your blog posts. Anyway I’ll be subscribing to your feeds and even I achievement you access consistently quickly.
I’ve noticed this small city undergo a lot of changes previously 30 years,
from the Canadian firm planning to assemble 11-history company towers, to Watt Market wanting to build 360 acres into
a master-planned beach community, to a class from Detroit wanting to
develop six square blocks along in the beach.
Thanks to my father who stated to me about this weblog,
this webpage is genuinely amazing.
It’s amazing to pay a visit this site and reading the views of all
friends concerning this paragraph, while I
am also keen of getting experience.
You can definitely see your expertise within the work you write. The sector hopes for more passionate writers like you who are not afraid to mention how they believe. Always go after your heart.
Thank you for each of your effort on this site. Debby really loves engaging in investigation and it’s easy to understand why. A number of us learn all of the powerful way you give helpful solutions on the website and therefore invigorate contribution from other individuals about this article plus our princess is really discovering a whole lot. Have fun with the remaining portion of the year. You have been conducting a pretty cool job.
Heya i am for the first time here. I came across this board and I find It really useful
Awsome blog! I am loving it!! Will be back later to read some more. I am bookmarking your feeds also
After a day experiencing everything the parks have to use you are
going to need award winning lodging and the holiday parks do not dissatisfy.
hey there and thank you for your info – I have definitely picked up anything new from right here. I did however expertise a few technical issues using this website, as I experienced to reload the web site lots of times previous to I could get it to load correctly. I had been wondering if your web host is OK? Not that I am complaining, but slow loading instances times will very frequently affect your placement in google and could damage your high quality score if ads and marketing with Adwords. Anyway I’m adding this RSS to my email and could look out for a lot more of your respective interesting content. Ensure that you update this again soon..
Simply wish to say your article is as astonishing.
The clearness in your submit is simply cool and that i can assume
you’re a professional on this subject. Well along with your permission allow
me to grasp your feed to stay updated with imminent post.
Thanks 1,000,000 and please keep up the gratifying work.
What’s up colleagues, how is the whole thing, and what you wish for to say about this paragraph,
in my view its really amazing in support of me.
Hi, i do believe i saw you visited my site thus i got to return the favor.I’m trying to find points to enhance my website!I suppose its ok to make use of
a number of your ideas!!
Way cool! Some very valid points! I appreciate you writing
this post as well as the other parts of the website is also really good.
magnificent issues altogether, you just received a logo new reader. What may you recommend about your put up that you simply made a few days ago? Any certain?
Its like you read my mind! You appear to know a lot about this, like you wrote the book in it or something. I think that you can do with some pics to drive the message home a bit, but instead of that, this is wonderful blog. A great read. I’ll definitely be back.
I intended to send you a little bit of note to say thank you again on the pleasing ideas you’ve shown above. It’s simply unbelievably open-handed with people like you to convey without restraint all that most people would’ve made available for an ebook in making some dough for themselves, notably given that you might have done it if you decided. The tactics also acted to become good way to know that other people have the same interest really like my personal own to figure out a whole lot more around this matter. Certainly there are thousands of more pleasurable situations up front for people who read through your website.
http://videolinkz.us/profile/rosariob38
Hello! Do you know if they make any plugins to protect against hackers?
I’m kinda paranoid about losing everything I’ve worked hard
on. Any suggestions?
Nosso estudo mostrou que a ativa utilizada no conjunto de acompanhantes foi adequada e também atingiu os objetivos almejados, proporcionando a eles possibilidade de expressarem seus conflitos, fantasias e também temores e também receberem atenção e
também entendimento de suas queixas, produzindo conforto e também tranqüilização
de suas ansiedades. http://letshelp.ir/QuinnBly68/tab:info
I ⅼike what yoᥙ guuys arе uup too. Such intelligent work and reporting!
Carrʏ on the superb works guys I’ve incorporated you guys to
my blogroll. I think it’ll improve the value oof my site :
).
Yes! Finally someone writes about blogroll.
It might likewise favorably affect patients’ intimate relationships, he stated, which can be considerably impacted by
herpes flare-ups.