关于C#中类的认识
静态字段 static
静态字段被类的所有实例共享,所有实例都访问内存同一内存位置,因此,如果该内存位置的值一旦被某个实例改变了,这种改变对所有的实例都可见。我们可以使用static关键字来将字段声明为静态,如:
namespace Hello
{
internal class Program
{
static void Main(string[] args)
{
D d1 = new D();
d1.Menu1 = 1;
D.Menu2 = 100;
D d2 = new D();
d2.Menu1 = 10;
Console.WriteLine($"d1's Menu1 is {d1.Menu1} and d1's Menu2 is {D.Menu2}");
Console.WriteLine($"d2's Menu1 is {d1.Menu1} and d2's Menu2 is {D.Menu2}");
}
}
class D
{
public int Menu1;
public static int Menu2;
}
}
在上面的额代码中,无论创建了多少个D的实例,其Menu2始终是保持一致的,但是各个实例的Menu1则是不同的。对于静态字段的额使用,我们可以直接这样使用:类名.静态字段
关于静态成员的生命周期
静态成员和实例成员的生命周期是不同的。
- 对于实例成员来讲,只有在实例被创建后才会产生实例成员,伴随着实例对象的销毁实例成员也会被销毁。
- 对于静态成员来讲,不管该类有没有实例,该类始终都会有静态成员,并且可以访问。如下所示:
namespace Hello
{
internal class Program
{
static void Main(string[] args)
{
D.Menu2 = 200;
Console.WriteLine($"D's Menu2 is {D.Menu2}");
}
}
class D
{
public int Menu1;
public static int Menu2;
}
}
关于类的属性声明和访问器
set和get访问器都有预定的语法和语义。可以把set访问器想象成一个方法,但有一个单独的参数,它“设置”属性的值。get访问器没有参数并返回一个值。
- set访问器:
- 拥有一个独立的、隐式的参数,名称为value,与属性的类型相同;
- 拥有一个返回类型void
- get访问器:
- 没有参数;
- 拥有一个与属性类型相同的返回类型。
如下图所示:
namespace Hello
{
internal class Program
{
static void Main(string[] args)
{
C1 c = new C1();
c.TheRealValue = 10;
Console.WriteLine(c.TheRealValue);
}
}
class C1
{
private int theRealValue;
public int TheRealValue //暴漏对私有成员访问的接口
{
set
{
theRealValue = value;
}
get
{
return theRealValue;
}
}
}
}
自动实现属性
因为属性经常要被关联到相关字段,所以C#提供了自动实现属性,允许只声明属性而不声明后备字段。编译器会自动的创建隐藏的后备字段以及自动挂载到get和set访问器上。如下图实例所示:
namespace Hello
{
internal class Program
{
static void Main(string[] args)
{
C1 c = new C1();
c.TheRealValue = 10;
Console.WriteLine(c.TheRealValue);
}
}
class C1
{
private int theRealValue;
public int TheRealValue { get; set; }
}
}
实例构造函数
实例构造函数是一个特殊的方法,它在创建类的每个新实例时候执行。注意要将构造函数声明为public,构造函数名称和类名一致,且没有返回值。
默认情况下编译器自带一个无参数的构造方法,我们也可以定义多个构造方法。
using System.Runtime.CompilerServices;
namespace Hello
{
internal class Program
{
static void Main(string[] args)
{
C1 c1 = new C1();
Console.WriteLine(c1.TheRealValue);
C1 c2 = new C1(90);
Console.WriteLine(c2.TheRealValue);
}
}
class C1
{
public int TheRealValue;
public C1()
{
TheRealValue = 10;
}
public C1(int TheRealValue)
{
this.TheRealValue = TheRealValue;
}
}
}
标签:Menu2,c#,初步,int,实例,TheRealValue,C1,public,中类
From: https://www.cnblogs.com/lilyflower/p/17932697.html