Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Egenskaper ger bekvämligheten för offentliga datamedlemmar utan de risker som följer med oskyddad, okontrollerad och overifierad åtkomst till ett objekts data. Egenskaper deklarerar -: särskilda metoder som tilldelar och hämtar värden från den underliggande datamedlemmen. Med sätta-accessorn kan en datamedlem tilldelas, och hämta-accessorn hämtar datamedlemmens värden.
Det här exemplet visar en Person
-klass som har två egenskaper: Name
(sträng) och Age
(int). Båda egenskaperna ger get
- och set
-åtkomst, så de betraktas som läs-/skrivegenskaper.
Exempel
class Person
{
private string _name = "N/A";
private int _age = 0;
// Declare a Name property of type string:
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
// Declare an Age property of type int:
public int Age
{
get
{
return _age;
}
set
{
_age = value;
}
}
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
}
public class Wrapper
{
private string _name = "N/A";
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
}
class TestPerson
{
static void Main()
{
// Create a new Person object:
Person person = new Person();
// Print out the name and the age associated with the person:
Console.WriteLine($"Person details - {person}");
// Set some values on the person object:
person.Name = "Joe";
person.Age = 99;
Console.WriteLine($"Person details - {person}");
// Increment the Age property:
person.Age += 1;
Console.WriteLine($"Person details - {person}");
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
*/
Robust programmering
I föregående exempel är egenskaperna Name
och Age
offentliga och innehåller både en get
och en set
-åtkomst. Offentliga accessorer tillåter alla objekt att läsa och skriva dessa egenskaper. Ibland är det dock önskvärt att utesluta en av åtkomstgivarna. Du kan utelämna set
-accessorn för att göra egenskapen skrivskyddad:
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
Du kan också exponera en accessor publikt men göra den andra privat eller skyddad. Mer information finns i asymmetrisk åtkomst.
När egenskaperna har deklarerats kan de användas som fält i klassen. Egenskaper möjliggör en naturlig syntax när man både hämtar och anger värdet för en egenskap, som i följande exempel:
person.Name = "Joe";
person.Age = 99;
I en egenskap set
metod är en särskild value
variabel tillgänglig. Den här variabeln innehåller det värde som användaren angav, till exempel:
_name = value;
Observera den rena syntaxen för att öka egenskapen Age
på ett Person
objekt:
person.Age += 1;
Om separata set
- och get
metoder användes för att modellera egenskaper kan motsvarande kod se ut så här:
person.SetAge(person.GetAge() + 1);
Metoden ToString
åsidosättas i det här exemplet:
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
Observera att ToString
inte uttryckligen används i programmet. Den anropas som standard genom WriteLine
-anrop.