1protected访问级别限制访问可以使自身类或者是该类作为基类的派生类时可以直接访问,即子类可以访问父类的protected数据成员
2静态成员变量只能通过类来访问,不能使用类的实例化对象去访问类中的静态变量。
静态变量时在程序集装载时分配内存空间的,而实例字段是在类实例化时分配内存空间的。
3枚举类型 的实例字段在初始化时的默认值是枚举变量下标为0的元素。
结构体在初始化时默认为值类型变量全部初始化为0引用类型变量初始化为null
4
反汇编程序sdk il
5c#中的字段,属性的使用方法,与java中的属性访问方法完全不同
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProgrammerCSharp5
{
class Program
{
static void Main(string[] args)
{
Car car = new Car();
car.Speed = 130;
Console.WriteLine(car.Speed);
}
}
class Car {
private double speed;
public double Speed
{
get {
return speed;
}
set
{
if(value>120){
speed = 120;
}
}
}
}
}
对于静态的成员变量也可以设置静态的属性,所有静态属性关联的字段必须是静态字段,;可以存在属性没有与之关联的字段的情况,但是一般所有的字段都有与之关联的属性。
6对于类中的静态数据成员只与类有关和具体的类的实例无关,所以对于同一个类声明的实例化变量中的静态数据成员值都是一样的,并且不可以通过具体的实例进行修改因为静态变量描述的是类的属性不是具体的类的 实例化变量
7this关键字的用途
局部变量和字段重名时使用this关键字访问字段
将当前实例作为参数传递到其他方法
声明索引器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProgrammerCSharp5
{
class Program
{
static void Main(string[] args)
{
car carDemo = new car();
carDemo.DoSomething("bmw");
Console.WriteLine(carDemo.Name);
}
}
class car
{
private string name;
public string Name
{
get {
return name;
}
set {
name = value;
}
}
public void DoSomething(string name)
{
this.name = name;
TestCar.test(this);
}
}
class TestCar
{
public static void test(car carDemo) {
Console.WriteLine("the name of the car is{0}",carDemo.Name);
}
}
}
静态方法实质上就是定义一种工具类,在工具类中定义实现某种特定功能是静态方法,以供在其他类中使用类中的静态工具方法。
8访问修饰符中相对于java多了internal修饰符内部访问级别,只有在同一程序集中,内部类型或成员才可以访问,另外protected internal 内部保护级别 访问仅限于当前程序集,可由自身即派生类访问。Internal相对于java中的默认访问权限就是对包可见的。当然比java的默认对包可见的权限要宽,是对整个程序集可见的,
9
一般不会在类外设置类中的静态成员变量,这样做只会破坏类的封装效果,但是一旦在类外修改了类中的静态成员变量那么,之后实例化的任何类对象中的静态成员变量的值都会是修改后的值。
10
静态函数可以访问非静态的成员函数,但是只能访问静态的数据成员不能访问非静态的数据成员,对于private的构造函数只有在自身类中实例化自身类的实例。通过静态函数访问类中的私有构造函数是最好的选择方式。
静态构造函数不能使用任何权限访问修饰符
静态构造函数不能使用任何参数。
静态构造函数的执行时间是在类的实例第一次实例化时,或者任何类的静态成员被访问之前,总之,静态构造函数的目的就是在使用类的实例之前完成对所有静态成员变量的初始化工作,静态构造 函数自动执行并且仅被执行一次
不能直接调用静态构造函数
程序中,用户无法控制静态构造函数的执行时间