Tag: 静态

访问非静态成员需要对象引用

我有这个错误出现,我不知道为什么……我试图查找它,人们说要创建类的对象或创建方法为静态…但我是不确定如何。 这是我的代码如下: public class SoundManager : MonoBehaviour { public List audioSounds = new List(); public double minTime = 0.5; public static void playSound(AudioClip sourceSound, Vector3 objectPosition, int volume, float audioPitch, int dopplerLevel) { bool playsound = false; foreach (AudioSource sound in audioSounds) // Loop through List with foreach { if (sourceSound.name != sound.name && sound.time […]

是否在类型之间共享generics类的静态成员

我正在尝试创建一个generics类,它将根据类型具有一些静态函数。 每种类型都有静态成员吗​​? 或者只有在使用通用的地方? 我问的原因是我想要每种类型的锁对象,而不是它们之间共享的对象。 所以,如果我有 class MyClass where T:class { static object LockObj = new object(); static List ObjList = new List(); } 我理解ObjList肯定会为每个使用的generics类型创建一个不同的对象,但LockObj在每个generics实例化( MyClass和MyClass )之间是不同的还是相同的?

从非静态方法构建静态委托

我需要创建一个类的非静态方法的委托。 复杂的是,在创建时我没有对类的重要性,只有它的类定义。 在通话时我确实有实例。 因此,我需要一种方法: 为成员方法构建一个“不完整”的委托,缺少实例。 从1中调用委托明确地传递该类的内容。 这些都可能吗? 怎么样? 注意:我愿意为第一名支付高性能价格,但理想情况下2不应该比委托电话贵很多。

迭代静态类的属性来填充列表?

我有一类字符串常量,如何循环获取字符串并填充列表框? static class Fields { static readonly string FirstName = “FirstName”; static readonly string LastName = “LastName”; static readonly string Grade = “Grade”; static readonly string StudentID1 = “StudentID”; static readonly string StudentID2 = “SASINumber”; } public partial class SchoolSelect : Form { public SchoolSelect() { InitializeComponent(); //SNIP // populate fields //Fields myFields = new […]

是引用该库的所有进程共享的库(DLL)中的静态变量吗?

我知道Web应用程序中使用的静态变量是为Web应用程序中的所有用户共享的。 如果我有一个使用某个静态私有变量的库(DLL),那么使用该库的所有应用程序是否共享该变量的值? 例如,假设我的DLL中有以下代码: private static bool isConnected = false; public static void Connect() { // TODO: Connect. isConnected = true; } public static void Disconnect() { // TODO: Disconnect. isConnected = false; } 然后在应用程序A中,我调用myDLL.Connect() ,它将isConnected的值isConnected为True 。 然后我有一些应用程序B执行相同的操作。 如果应用程序A稍后调用myDLL.Disconnect() ,则应用程序B是否将isConnected视为False因为这两个应用程序共享具有静态变量的同一DLL文件? 在这种情况下,DLL文件在同一文件路径中实际上是相同的文件。 (我之前在这里问了一个关于Web应用程序的类似问题。它没有关系。)

我需要在C#.Net中创建一个Thread安全的静态变量

好吧,它比问题复杂一点。 class A { static int needsToBeThreadSafe = 0; public static void M1() { needsToBeThreadSafe = RandomNumber(); } public static void M2() { print(needsToBeThreadSafe); } } 现在我要求在M1()和M2()之间调用’needsToBeThreadSafe’保持线程安全。

对HttpContext.Current.Session的静态引用是否为所有用户返回相同的会话?

在同一Web应用程序的多个用户方面,以下代码是否存在问题? 我的意思是,我知道一个纯静态字符串将在单个ASP.NET应用程序的所有会话中共享,但鉴于这明确引用了Current.Session ,即使它是静态的,它似乎总是引用“当前用户”的会话实例。 但是一个错误正在发生,可以解释为每个人共享Mode的当前值,从而最近的更改覆盖其他人的模式值。 (作为背景:此字符串位于整个应用程序中使用的Helpers类中。我不希望在整个应用程序中对Session[“Mode”]进行硬编码引用,并且不希望必须传递Session[“Mode”]来自aspx.cs页面的每个方法调用中的Session[“Mode”] 。) public static string Mode { get { var value = HttpContext.Current.Session[“Mode”]; return (value ?? string.Empty).ToString(); } set { HttpContext.Current.Session[“Mode”] = value; } }

静态锁是否适用于不同的子类?

如果我有 abstract class Parent { static object staticLock = new object(); public void Method1() { lock(staticLock) { Method2(); } } protected abstract Method2(); } class Child1 : Parent { protected override Method2() { // Do something … } } class Child2 : Parent { protected override Method2() { // Do something else … } } […]

通用静态类 – 在运行时检索对象类型

我有一个X类型的对象,我可以(显然)在运行时检索。 var type = myObject.GetType(); 我有一个通用的静态类。 public static class MyStaticClass { public static void DoStuff(T something) { // bla bla } } 我想做的是: MyStaticClass.DoStuff(myObject); 但我不能。 实际上,MyStaticClass只有几种类型可以运行,并且它们共享多个接口。 一种解决方法是写: if (myObject.GetType() == typeof(X)) { MyStaticClass.DoStuff(myObject as X); } if (myObject.GetType() == typeof(Y)) { MyStaticClass.DoStuff(myObject as Y); } 但它很冗长,写到处都是非常丑陋的 – 我觉得我不应该这样做,但我也不应该这样做。 我无法相信没有解决方案。 或者至少有任何整洁的解决方法? 或者我的方法开始时是错误的(如果是这样的替代方案)? 我应该为X,Y,Z创建一些(抽象?)基类吗?

C#抽象类静态字段inheritance

我觉得我跳过了一两个C#课程,但这是我的困境: 我有一个抽象类,我从中派生出多个子类。 我确信,对于每个子类,我将有一个构造函数,它需要某个静态对象作为模型,并且每个子类的对象都不同。 我的第一种方法是在抽象父类中创建一个公共静态对象然后,在我开始创建子类的任何实例之前,我会为它们中的每一个修改它,但事实certificate这样我实际上只做了一个静态对象,用于抽象类,每个子类都使用它。 我怎么能解决这个问题? 更确切地说,这是伪代码: 父抽象类: abstract class AbstractClass { static public ModelObject Model; … } 其中一个子课程: class Child : AbstractClass { … public Child() { this.someField = Model.someField; } } 编辑: Model需要是“ModelObject”类的成员,它不应该是单例或其他任何东西。 EDIT2: 更确切地说,我选择了这种实施方案来进行国际象棋游戏:我有一个抽象的国际象棋类,子类代表游戏的具体部分:棋子,骑士等等。 抽象类inheritance自MeshMatObject,这是一个表示具有基本function的通用3d对象的类,如旋转,网格,材质,纹理等,它定义了象棋游戏块的抽象方法,如GetPossibleMoves()。 我上面讨论的Model对象是MeshMatObject的一个成员,在我看来,应该只在类外定义一次,然后用于所有的部分。 我的意思是:例如,所有的棋子都有相同的网格和纹理,所以每次你想制作一个棋子时,我都没有看到将模型作为参数的意义。