public static void DoSomething()
{
int a;
string b;
//..do something
}
在上面的例子中,我声明了两个变量。 它们是静态的,因为包含它们的方法是静态的吗?
答案 0 :(得分:7)
没有。只有方法是静态的而不是变量。
来自MSDN:
C#不支持静态局部变量(在方法范围内声明的变量)。
如果要在静态成员中使用静态变量,请在静态方法之外进行声明,
private static int _var = 0;
public static void SampleMethod()
{
_var++;
}
答案 1 :(得分:4)
虽然在C中可用,但C#中不支持静态局部变量。
如果需要等效的本地静态变量,可以在类或静态变量上创建实例变量。否则,请考虑方法本身是否属于静态类,以及它是否应该是不同类型的一部分。
答案 2 :(得分:1)
来自MSDN
C#不支持静态局部变量(变量是 在方法范围内声明)。
答案 3 :(得分:1)
我对您的意见表示肯定,但在下面的示例代码中,我采取了有关使用受保护内存的访问冲突异常。因为它可能不支持静态局部变量,但在内存管理中它可以指向相同的地址。
public static byte[] RawSerialize(object anything)
{
int rawsize = Marshal.SizeOf(anything);
IntPtr buffer = Marshal.AllocHGlobal(rawsize);
Marshal.StructureToPtr(anything, buffer, false);
byte[] rawdata = new byte[rawsize];
Marshal.Copy(buffer, rawdata, 0, rawsize);
Marshal.FreeHGlobal(buffer);
return rawdata ;
}
答案 4 :(得分:0)
您不能拥有本地静态变量。
C#不支持静态局部变量(在方法范围内声明的变量)。
答案 5 :(得分:0)
不,只有方法是静态的。
来自MSDN:
C#不支持静态局部变量(变量是 在方法范围内声明。
here:
static修饰符可以用于类,字段,方法, 属性,运算符,事件和构造函数,但不能使用它们 使用索引器,析构函数或类以外的类型。
如您所见,未提及局部变量。
但是,您可以使用静态字段:
public class MyClass
{
private static int MyVariable = 10;
public static void MyMethod()
{
MyVariable++;
}
}
一个类可以是静态的,它可以有静态成员,包括函数和字段,但不能包含静态作用域中的变量。
答案 6 :(得分:0)
您可以使用 System.Web.HttpContext.Current.Session 在ASP.NET中拥有基于会话的“静态”变量。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace SomeNameSpace
{
public static class CSession
{
private static readonly string zE = "";
private static readonly string CrLF = Environment.NewLine;
/// <summary>
///
/// </summary>
public static bool HasSession { get { return HttpContext.Current != null && HttpContext.Current.Session != null; } }
/// <summary>
/// Get a session variable
/// </summary>
/// <param name="pSessionKey"></param>
/// <returns></returns>
public static object Get(string pSessionKey)
{
object t = null;
try
{
if (HasSession && HttpContext.Current.Session[pSessionKey] != null) { t = (object)HttpContext.Current.Session[pSessionKey]; }
}
catch (Exception ex) { t = null; string m = ex.Message; }
return t;
}//object Get(string pSessionKey)
/// <summary>
/// Set a session variable
/// </summary>
/// <param name="pSessionKey"></param>
/// <param name="pObject"></param>
public static void Set(string pSessKey, object pObject)
{
if(!HasSession) { return; }
HttpContext.Current.Session.Remove(pSessKey);
HttpContext.Current.Session.Add(pSessKey, pObject);
}//void Set(string pSessionKey, object pObject)
public static string GetString(string pSessKey)
{
string sTemp = zE;
object t = Get(pSessKey);
if (t != null) { sTemp = (string)t; } else { sTemp = zE; }
return sTemp;
}//string GetString(string pSessionKey)
public static int GetInt(string pSessKey)
{
int s = 0;
object t = Get(pSessKey);
if (t != null) { s = (int)t; }
return s;
}//int GetInt(string pSessionKey)
public static Int32 GetInt32(string pSessKey)
{
Int32 s = 0;
object t = Get(pSessKey);
if (t != null) { s = (Int32)t; }
return s;
}//Int32 GetInt32(string pSessionKey)
public static bool GetBool(string pSessKey)
{
bool s = false;
object t = Get(pSessKey);
if (t != null) { s = (bool)t; }
return s;
}//bool GetBool(string pSessionKey)
}//public static class CSession
}