public class myClass
{
string c_Treeid; //这里错了,不是个静态变量
public static string C_Treeid
{
get {return c_Treeid;}
set {c_Treeid=value; }
}
}
改成:
public class myClass
{
string static c_Treeid; //这里错了,不是个静态变量
public static string C_Treeid
{
get {return c_Treeid;}
set {c_Treeid=value; }
}
}
{
string c_Treeid; //这里错了,不是个静态变量
public static string C_Treeid
{
get {return c_Treeid;}
set {c_Treeid=value; }
}
}
改成:
public class myClass
{
string static c_Treeid; //这里错了,不是个静态变量
public static string C_Treeid
{
get {return c_Treeid;}
set {c_Treeid=value; }
}
}
根据你的方法写了,出错了,提示为:
CS1585: 成员修饰符“static”必须位于成员类型和名称之前
public class myClass
{
string c_Treeid;
public string C_Treeid
{
get {return c_Treeid;}
set {c_Treeid=value; }
}
}
将静态去掉就行了!!
public class myClass
{
static string c_Treeid;
public myClass()
{
c_Treeid = "AAa";
} public string C_Treeid
{
get { return c_Treeid; }
set { c_Treeid = value; }
}
} static void Main(string[] args)
{
myClass my = new myClass();
string mystring = my.C_Treeid;
Console.WriteLine(mystring);
}
C#静态方法
学习C#静态函数及变量的一个精典例子与代码(1)用于对静态字段、只读字段等的初始化。 (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。 (3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数 (4)静态构造函数是不可继承的,而且不能被直接调用。 (5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。 (6)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。 以下用例子代码进一步说明: /************************************************** * 静 态 构 造 函 数 练 习 * (1)①②③……为执行顺序 * (2)输出结果: static A() * static B() * X = 1, Y = 2 ***************************************************/ using System; class A { public static int X; static A() //④ 执行完后返回到③ { X = B.Y + 1; Console.WriteLine("static A()"); } } class B { public static int Y = A.X + 1; //③ 调用了A的静态成员, // 转到A的静态构造函数----> static B() //② 如果带有初始值设定项的静态字段, // 执行该类的静态构造函数时, // 先要按照文本顺序执行那些初始值设定项。 // 转到初始值设定项----> { Console.WriteLine("static B()"); } static void Main() //① 程序入口, // 如果类中包含用来开始执行的 Main 方法, // 该类的静态构造函数将在调用 Main 方法之前执行。 // 转到B的静态构造函数----> { Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果 Console.ReadLine(); } } 什么是静态方法 静态方法的1个特别作用就是不用创建类的对象,而直接用类里面的方法(public static 2个条件),例如: class A { public static void b() {..............} } 可以这样直接用: A.b(); 那么在程序中如何可以利用静态字段和静态构造方法,通常适用于于一些不会经常变化而又频繁使用的数据,比如连接字符串,配置信息等,当满足上面所说的两点时,进行一次读取,以后就可以方便的使用了,同时也节约了托管资源,因为对于静态成员,一个静态字段只标识一个存储位置。对一个类无论创建了多少个实例,它的静态字段永远都只有一个副本。 static: 类变量(对象共享)可以用类名,对象名点取,间接使用。 类方法 1)static方法中不能直接使用非静态成员, 因为非静态成员与实例相关,通过对象点取间接使用 2)static方法中不能用this(与实例相关) 3)非static方法中可以使用static成员 静态方法有什么弊端? 问:我翻看一些源码工程时看到几乎没有什么静态方法唯独Ms的SQLHelper中几乎全是静态方法 为什么呢?答1:在一些系统中使用非常频繁的方法都使用静态方法可以提高系统性能我是这么认为的 :)答2:本身不可升级, 重写 这要看一个软件产品的目的是什么了.答3:为了方便,不用实例化,但这样程序编译运行时就占用了系统资源答4:静态的属性和方法在程序启动的时候,就全部装入内存的,而不管这些方法、属性以后有没有用到。即使是没有人再访问程序,这部分内存仍然不会释放还有就是,所有访问者看到的静态属性的数据几乎都是一样的,比如A用户设置了UserName这个属性,B用户访问的时候,得到的UserName仍然是A用户设置的那个。这种特性,如果用在固定数据中,那不会有太大问题,比如连接字符串之类的 答5:静态方法/数据成员是属于类的,不是属于某一个对象的,因而调用它不需要实例化;静态方法和静态数据成员相当于共享变量。为该类的所有对象所共有,因而在需要共享数据时,定义这种类型时很好的选择。 一但定义一个类后(不一定要实例化对象)该类的所有静态成员就载入内存(并不是程序启动,就装入内存,没有定义该类时它不会载入内存) 静态成员的作用域与它所属的类的作用域相同
{
public static string C_Treeid;
}
你这样做也不行啊,我试过了,别忘了我不光是读变量,而是在a.aspx页面先赋值给c_treeid,再到b.aspx里去读变量的值。
比如
你调用的是属性
myClass.c_Treeid 是错的该是myClass.C_Treeid
可以吗?不行吧?
如果改成
1、myClass.cs (类文件)
public class myClass
{
string c_Treeid;
public string C_Treeid //在这里去掉了static
{
get {return c_Treeid;}
set {c_Treeid=value; }
}
} 2、a.aspx.cs (赋值)
myClass.C_Treeid=txtTree.text; //在这里是行不通的了
只能改成
myClass my = new myClass();
my.c_Treeid=txtTree.text;3、b.aspx.cs (取值) //问题来了,在这里如何拿得a页面赋的值
mytext.text=myClass.C_Treeid;
应该改为什么呢?
。。
要不就把c_Treeid变成静态的
string str = my.C_Treeid;
//难道取不出吗 winfrom 都是这样做的 asp.net 行不通吗?
public class myClass
{
private string c_Treeid;
public string C_Treeid
{
get {return c_Treeid;}
set {c_Treeid=value; }
}
} 2、a.aspx.cs (赋值)
如果上边的类和现在的没在一个页面,先引用
myClass myclass=new myClass();
myclass.C_Treeid=txtTree.text; 3、b.aspx.cs (取值)
如果上边的类和现在的没在一个页面,先引用
myClass myclass=new myClass();
mytext.text=myclass.C_Treeid;
要先负值再取值,还不可以
public class Class1
{
private static string aaa;
public static string AAA
{
get { return aaa; }
set { aaa = value; }
}
}a中
Class1.AAA = "aaaaaaaaa";b中
textBox1.Text = Class1.AAA;我是winfrom 中测试的 没问题也 我上面说的那个错了 重新new 了 肯定取不出来的
但是反过来是可以的,也就是属性是非静态,成员是静态。public class myClass
{
static string c_Treeid;
public string C_Treeid
{
get {return c_Treeid;}
set {c_Treeid=value; }
}
}
这样子那个静态变量就是全局共享的,但是如此一来就要注意有多少个class实例会访问此变量
总之这似乎不是什么好主意。
{
private static string c_Treeid;
public static string C_Treeid
{
get { return c_Treeid; }
set { c_Treeid = value; }
} public MyClass()
{
//
// TODO: Add constructor logic here
//
}
}
private int _MemberID; public int MemberID
{
get { return _MemberID; }
set { _MemberID = value; }
}在类名. MemberID=赋值 是要这样子么?