C#基础之变量及静态...

  1. C# 中(不同于 C++)的变量,总是需要你在访问它们前先进行初
    始化,否则你将遇到编译时错误。故而,不可能访问未初始化的变量。
  2. 你不能在 C# 中访问一个“挂起”指针。
  3. 超出数组边界的表达式索引值同样不可访问。
  4. C# 中没有全局变量或全局函数,取而代之的是通过静态函数和静态

变量完成的。
C#之值类型和引用类型

一 、值类型和引用类型 异同

值类型引用就会报错,引用类型就不会
值类型没有初始化,就没有在内存开辟空间
值类型 : 所有值类型均隐士派生与System.ValueType;
如:bool****型:bool(System.Boolean的别名);
枚举:enum(派生于System.Enum);
可空类型(派生于System.Nullable泛型结构体,语法 T? 是 System.Nullable<T> 的简写,此处的 T 为值类型。)
**2.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
**例如:
int i = new int();
等价于:Int32 i = new Int32();
等价于:int i = 0;
等价于:Int32 i = 0;
使用new运算符时,将调用特定类型的默认构造函数并对变量赋以默认值。在上例中,默认构造函数将值0赋给了i。
3.所有的值类型都是密封(seal)的,所以无法派生出新的值类型。
4.****值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。

引用类型的特性:
1.****C#的所有引用类型均隐式派生自System.object。
****各个引用类型及其基类:
****数组:
(派生于System.Array)数组的元素,不管是引用类型还是值类型,都存储在托管堆上;
类:class(派生于System.Object);
接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。);
委托:delegate(派生于System.Delegate);
object****:(System.Object的别名);
字符串:string(System.String的别名)。
2.引用类型可以派生出新的类型。
3.引用类型可以包含null值。
4.****引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
5.引用类型的对象总是在进程堆中分配(动态分配)。

二 、c#没有全局变量,每一个c#文件都不会互相干扰吗?那么一个变量怎么互相引用?

你这说的是什么意思呀。C#怎么会没有全局变量呢,你如果只是不知道怎么可以在不同类之间互想调用变量值这还可以理解。下面是我给你的分类:
全局变量可会为,同类下的全局变量即在一个类里定义
public class class1
{
public int 变量1;
public static int 变量2;
public const int 变量3;

public readonly int 变量4;

}
变量1的调用方法:只能通过class1实例调用。如 class1 test = new class1;
int class变量值 = test.变量1;(注意此时变量值要用关键字public/internal/protecd才可调用)具体这三个关键字的用法你可以去研究下。如是关键字是private 那就不能调用了。但可用变通的做法。可以用属性如可以在类里增加一个属性来控制对变量的调用方式

public int 调用变量1
{
get{return this.变量1;}
private set{this.变量1 = value;}
}
这样你可以把变量1用private关键字封闭起来,不让用户去修改或访问它。如果要知道他的值可以调用属性 int class变量值 = test.调用变量1;获得值。但无法修改这个变量值。除非在属性中的删除set的关键字private 这样才可以在其它类里获取或修改它的值。
变量2的调用方法:这种变量在程序加载之后即运行时。系统就会事先定义此变量。调用方法就是不管在何处都可以对它修改访问 int 变量2值 = class.变量2; 在这里要注意正因为这个变量唯一只有一个不管理你class1创建了多少个实例其变量2的值也只有一份。不会多也不会少。以下的另个变量也是这样的只是其他两种变量不可修改。如果对变量2进行修改的话要注意在多线程的线程冲突。因为此变量只有一份如果其中一个线程正在修改还没有完成而另一个线程确来访问变量值就有可以得到不正确的值。
变量3与变量4的调用方法:与变量2相同只是不能修改。两者唯一不同的是值存放的形式的不同
变量3在编译时是直接将值的给对方的调用方。而变量4是在运行时才把最终的值给调用方。其中利弊可以自己权衡。

三、C#中静态函数的作用
public static void haha()与public void haha()有什么区别~~
class Test
{
public static void A方法()
public voidB方法()
}
在调用的时候,如果我要调用 A方法只需这样调用:Test.A方法()如果要调用B方法这样调用Test ts = new Test();ts.B方法静态方法的好处就是你无需new(也就是实例化)那个Test类.

静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量。
static变量在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一C#静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。
静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。
class StaticTest{
static int x = 0; int y = 0;
public void SetX(int a) { x = a; }
public void SetY(int a) { y = a; }
public void Print() {
Console.WriteLine("x = {0} y = {1}", x, y);
}
static void Main(string[] args) {
StaticTest st = new StaticTest();
StaticTest st1 = new StaticTest();
st.SetX(10);      //将10赋给x;
st.SetY(10);      //将10赋给y;
st.Print(); //显示:x=10 y=10
st1.SetX(20);      //将20赋给x
st1.SetY(20);     //将20赋给x
st1.Print();   //显示:x=20 y=20
st.Print(); //由于x是静态变量,所以在此调用第一次初始化实例st时,静态变量已经变为20, 输出:x=20 y=10
st.SetX(30);   
    st.SetY(30); 
        st.Print();  
     //由于x是静态变量,所以在此调用初始化实例st时,静态变量已经变为30, 输出:x=30 y=30
st1.Print();
//由于x是静态变量,所以在此调用st1实例时,静态变量已经变为30, 输出:x=30 y=20
}
}
静态类:
声明为static,它仅包含静态成员,不能用new静态类的实例。使用静态类来包含不与特定对象关联的方法。
功能:仅包含静态成员,不能被实例化,是密封的,不能包含实例构造函数,可包含静态构造函数以分配初始值或设置某个静态变量。
优点:编译器能够执行检查以确保不致偶然地添加势力成员。编译器将保证不会创建此类的实例。
静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享。
探究
public static class StaticTestClass{
public static int n = 0;
public static void Add() {
n++;
}
}
网页 P1.aspx 调用 StaticTestClass.Add(),并在页面上输出 n。
网页 P2.aspx 调用 StaticTestClass.Add(),并在页面上输出 n。

访问者 V1 从客户端 C1 访问 P1.aspx,此时输出为 1。
访问者 V2 从客户端 C2 访问 P2.aspx,此时输出为 2。
访问者 V1 关闭浏览器,重新打开访问 P1.aspx,此时输出为 3。
静态方法:
是一种特殊的成员方法,不属于类的某一个具体的实例。非静态方法可以访问类中的任何成员,而静态只能访问类中的静态成员。

静态构造函数:
class SimpleClass{
// Static constructor
static SimpleClass() {

}}
一个类只能有一个静态构造函数,该构造函数不能有访问修饰符,不能带任何参数,不能直接调用,只能在:

1 创建包含静态构造函数的类实例时

2 访问包含静态构造函数的静态成员时

会先调用静态构造函数,无论创建了多少个类实例,其静态构造函数都只调用了一次。

用于对静态字段、只读字段等的初始化。              
添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。      
类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
静态构造函数是不可继承的,而且不能被直接调用。            
如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。  
如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

C#静态方法及属性在程序启动的时候,就全部装入内存的,而不管这些方法、属性以后有没有用到。即使是没有人再访问程序,这部分内存仍然不会释放还有就是,所有访问者看到的静态属性的数据几乎都是一样的,比如A用户设置了UserName这个属性,B用户访问的时候,得到的UserName仍然是A用户设置的那个。这种特性,如果用在固定数据中,那不会有太大问题,比如连接字符串之类的

C#静态方法/数据成员是属于类的,不是属于某一个对象的,因而调用它不需要实例化;静态方法和静态数据成员相当于共享变量。为该类的所有对象所共有,因而在需要共享数据时,定义这种类型时很好的选择。 一但定义一个类后(不一定要实例化对象)该类的所有静态成员就载入内存(并不是程序启动,就装入内存,没有定义该类时它不会载入内存) 静态成员的作用域与它所属的类的作用域相同

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,558评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,771评论 1 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,627评论 0 11
  • 固定速度价格diff(不变)deamacd0100.0079772080.0079772100.110.10.00...
    CNetdog阅读 210评论 0 0