在C#中使用静态构造函数来创建一个单子
我一直在查看有关在C#中创建静态构造函数的文章: http://csharpindepth.com/articles/articles/general/general/general/singleton.aspx /p> 现在,他没有提到的一个选择是使用一个简单的静态构造函数.做类似下面的事情有什么问题吗?如果有效,它似乎比他复杂的解决方案恕我直言简单. public static class ServiceFactory { static ServiceFactory() { container = new Foo(); } static Foo container; public static Instance { get { return container; } } } 我问的是我正在进行代码审查,并想将其放置为如果很好. 解决方案 您的代码没有构建单例.它正在创建一个Foo的实例,大概是其他任何
0 2024-04-16
编程技术问答社区
如何在XAML中绑定一个静态属性?
我正在尝试将不同类的静态属性绑定到文本块的文本属性,并可以使绑定到工作,但是当静态属性的值已更改时,文本属性没有更新.我读到我无法使用InotifyPropertychanged,因为该属性是静态的,并且看到了一些建议使用依赖项属性的解决方案.我是C#的新手,并不真正了解如何使用依赖性属性,但是进行了几次尝试,这些尝试似乎不起作用,原因有两个. 1.我的静态属性具有自定义Getter和Setter和2. 2.静态属性用于多种静态方法,我无法弄清楚如何使用依赖项属性来完成工作.我不知道在使用依赖项属性时如何使用自定义getter和setter,或者是否可以完成此操作,或者如何将其更改为依赖项属性后继续使用静态属性. . 这是静态属性的当前代码: public class Helper { public static string Token { get { using (StreamReader stre
0 2024-04-16
编程技术问答社区
如何使标签静态化
所以我有一个程序,我告诉用户两个骨架是否匹配,但事实是我需要通过class访问label.我继续遇到的错误是 Error1 An object reference is required for the non-static field, method, or property 'WpfApplication1.MainWindow.matchLabel' 这是我在代码中所拥有的: static标签 static Label matching { get { return matchLabel; } //errors here set { matchLabel = value; } //and here } 类 private class Scan { private void Start() { Skeleton skeleton = ne
0 2024-04-16
编程技术问答社区
我应该使用静态方法还是非静态方法?
我已经在C#中创建了一个控制台应用程序,并且有 main 方法(静态),我的要求分别初始化了2个计时器和处理2种方法,该方法将定期调用以执行某些任务.现在,我采用了所有其他方法/变量静态的,因为它是从计时器处理程序事件调用的(由于从main调用它是静态的). 现在,我想知道,如果该控制台运行长时间,则如何消耗内存?如果我想应用OOPS概念,那么我是否需要使所有方法/变量不静态,并通过创建类的对象来访问它?在这种情况下,记忆将如何消耗? 更新: 以下是我的代码的片段 public class Program { readonly static Timer timer = new Timer(); static DateTime currentDateTime; //other static variables //----- static void Main() {
0 2024-04-16
编程技术问答社区
在C#中,是否可以在静态函数中调用一个非|静态函数?
是否可以调用非静态函数,该功能在C#? 中使用静态函数内的公共非静态类 public class MyProgram { private Thread thd = new Thread(myStaticFunction); public AnotherClass myAnotherClass = new AnotherClass(); public MyProgram() { thd.Start(); } public static void myStaticFunction() { myNonStaticFunction(); } private void myNonStaticFunction() { myAnotherClass.DoSomethingGood(); } } 好吧,像上面的无效代码是我需要的. 有什么想法吗?
0 2024-04-16
编程技术问答社区
静态方法的内存消耗
我有以下方法的以下类: public class Foo { public string A {get;set;} public static Foo New(string a) { Foo newFoo = new Foo(); newFoo.A = a; return newFoo; } } public class Bar { public void SomeMethod() { ... Foo anotherFoo = Foo.New("a"); .... } } 如果条形类在使用上述代码的过程中创建foo,则会foo fore of of Out范围并收集垃圾或将FOO(因为它使用静态方法)继续引用对变量newfoo的参考,因此另一个foo永远不会超出范围? 解决方案 静态方法的存在不会影响对象的GC的资格,而只会引用该对象的参考
0 2024-04-16
编程技术问答社区
通过字符串化的名称获取属性值
请考虑此类: public static class Age { public static readonly string F1 = "18-25"; public static readonly string F2 = "26-35"; public static readonly string F3 = "36-45"; public static readonly string F4 = "46-55"; } 我想编写一个获得" F1"并返回" 18-25"的函数.例如 private string GetValue(string PropertyName) .... 我该怎么做? 解决方案 您可以简单地使用SWITCH语句执行以上任务: public static string GetValue(string PropertyName) { switch (PropertyName) {
0 2024-04-16
编程技术问答社区
从静态函数中引用非静态字段,反之亦然不可能?
我想通过编程方式确定我要动态创建的某些控件的空间.因此,我想获得容器的高度并将其除以行数(常数). 我已经获得了此功能(此代码是名为DynamicCanel Live的表格的一部分): private static int getControlHeightToUse() { return (dynamicPanel.Height / NUMBER_OF_ROWS); } ...这给了我编译时错误,"*非静态字段,方法或属性需要一个对象引用remocenexten_crlogins.crloginsmainform.dynamicpanel'*"*" 我不明白它要告诉我/想要什么. 如果我删除"静态": private int getControlHeightToUse() { return (dynamicPanel.Height / NUMBER_OF_ROWS); } ...然后,我得到编译时错误,"*字段初始化器无法引用非静态字段,方法
0 2024-04-16
编程技术问答社区
通用的静态类--在运行时检索对象类型
我有一个类型 x 的对象,我可以(显然)在运行时检索. var type = myObject.GetType(); 我有一个通用静态类. public static class MyStaticClass { public static void DoStuff(T something) { // bla bla } } 我想做的是: MyStaticClass.DoStuff(myObject); 但我不能. 实际上,神秘阶级只有几种类型,并且它们共享几个接口.一个解决方法是写: if (myObject.GetType() == typeof(X)) { MyStaticClass.DoStuff(myObject as X); } if (myObject.GetType() == typeof(Y)) { MyStaticClas
0 2024-04-16
编程技术问答社区
从非静态方法中建立一个静态委托
我需要为类的非静态方法创建一个委托.并发症是,在创建时,我对班级没有班级定义的目的.在通话时,我确实有实例.因此,我需要一种方法来: 为成员方法建立一个"不完整"的合法数,缺乏实例. 从1个单独通过班级的目的从1个授权. 这两个都可能吗?如何? 注意:我愿意为第一名支付高度的价格,但理想情况下2不应该比代表呼叫要贵得多. 解决方案 您有两个选择,您可以像扩展方法一样对待它.创建一个代表以接收对象和任何可选参数,然后将这些参数传递给实际函数调用.或如Dan所述使用Delegate.CreateInstance创建一个. ,例如, string s = "foobar"; // "extension method" approach Func substring1 = (s, startIndex) => s.Substring(startIndex); substring1(s, 1); // "oobar"
0 2024-04-16
编程技术问答社区
配置管理器和静态类
我想使用ConfigurationManager从 static 类访问一些字符串值.但是,我需要专门处理缺乏值或存在空值的情况.现在我正在使用类型的初始化器,例如 private static readonly string someStr = ConfigurationManager.AppSettings["abc"]; 完成这项工作.但是,如果App.config中不存在具有键" ABC"的字符串,则执行将继续使用null参考代替someStr.那么,在初始化中验证此值的最佳方法是什么?我初始化值然后检查有效性的静态构造函数?我听说应在可能的情况下避免静态构造函数并用类型的初始化器代替. 解决方案 我正在使用类似的东西: public static readonly string someStr = ConfigurationManager.AppSettings["abc"] ?? "default value"; 或处理空字符串
0 2024-04-15
编程技术问答社区
对HttpContext.Current.Session的静态引用是否为所有用户返回相同的会话?
根据同一Web应用程序的多个用户,是否有以下代码中有问题的空间?我的意思是,我知道一个纯粹的静态字符串将在单个ASP.NET应用程序的所有会话中共享,但是鉴于此明确指的是Current.Session,即使它是静态的"当前用户"的会话实例 但是,正在发生错误,每个人都可以解释Mode的当前值,因此最新的变化覆盖了其他所有人的模式值. (作为背景:此字符串在整个应用程序中使用的Helpers类中.我不想在整个应用程序中对Session["Mode"]进行硬编码的引用,并且不想通过Session["Mode"]在ASPX.CS页面的每个方法中调用.) public static string Mode { get { var value = HttpContext.Current.Session["Mode"]; return (value ?? string.Empty).ToString(); } set
0 2024-04-15
编程技术问答社区
定义一个每个子类定义一次的静态属性的最佳方式是什么?
我编写了以下控制台应用来测试静态属性: using System; namespace StaticPropertyTest { public abstract class BaseClass { public static int MyProperty { get; set; } } public class DerivedAlpha : BaseClass { } public class DerivedBeta : BaseClass { } class Program { static void Main(string[] args) { DerivedBeta.MyProperty = 7; Console.WriteLine(DerivedAlpha.MyProperty); //
6 2024-04-15
编程技术问答社区
静态锁是否在不同的儿童类别中起作用?
如果我有 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 ... } } 会打电话给new Child1().
0 2024-04-15
编程技术问答社区
实例化包含静态 void Main()的类。
我正在审查同事的C#控制台应用程序,我看到了这个片段: class Program { static void Main(string[] args) { Program p = new Program(); p.RealMain(); } ... non-static RealMain function } 大概,他这样做是因为他想拥有实例级字段,等等. 我以前从未见过,但是这种风格使我感到困扰.这是一种常见且公认的做法吗? 解决方案 有一个思想流派说,面向对象代码的主要()函数应尽可能少. main()是对程序代码设计的"丑陋"回溯,其中程序是在一个函数中编写的,仅在必要时称子例程.在OOP中,所有代码都应封装在告知时完成工作的对象中. 因此,通过这样做,您可以将LOC减少到Main()入口点为两行,并且该程序的真正逻辑是以O-O的方式进行结构和执行的. 其他解决方案 对我来说很有
0 2024-04-15
编程技术问答社区
为什么要使用静态类?
我对静态类和静态方法有疑问.从MSDN我了解到"静态类和类成员用于创建可以在不创建类实例的情况下访问的数据和功能." 因此,如果我们不想通过一个实例将课程相关联,我们将其作为静态.那是唯一的优势吗?任何人都可以指导我参加静态课程的实时场景. 在课程中一些时间(不是静态),我正在找到静态方法.静态方法具有什么优势/性能的优势,可以在实例上提供实例方法. 解决方案 对于公用事业课程,它们很棒.正如您提到的,它们与全球状态相似.因此,对于没有状态的课程,对于绩效益处,课程应该是静态的. 另一方面,静态类很难测试(如果包含状态).多态性和其他OO概念也丢失了. 明智地使用. 其他解决方案 将 static 关键字应用于类是C#语言约定,这对CLR并不意味着任何特别的内容.它仅确保所有成员也是静态的,并且您不能意外使用 new 关键字的类实例. 在 其他解决方案 IMO静态类是伪装的程序编程.不一定是一件坏事,但不是很糟糕.提防
0 2024-04-15
编程技术问答社区
如何获得一个WPF窗口的静态引用?
我已经尝试了大量方法来在程序中获取窗口的静态参考.我需要在运行时从不同的类中访问其所有成员,因此需要静态参考. 我想拥有的是Program.Window1,其中Core是静态的,MyWindow是其静态成员之一. 在winforms中,我通常在program.cs中声明我的静态表单,但这似乎与WPF及其自定义" app.xaml"应用程序定义不起作用. 我该怎么做? 注意:我已经尝试了多种方法:使用直接调用新窗口(即Program.Window1 = new Window1())将无法使用,因为我得到了一些线程无效的例外.据我了解,到目前为止,只有ApplicationDefinitions才能在WPF中启动Windows. 当我尝试创建一个窗口" by Code"而不是由默认的XAML ApplicationDefinition的startupuri: 创建一个例外. 调用线程必须是sta,因为许多UI组件都需要此. 解决方案 创建一个可以
0 2024-04-15
编程技术问答社区
我可以将DataContext设置为一个静态类吗?
我有一个静态类,该课程从应用程序组件中读取信息. 我已将其声明为静态,因为该类不需要实例声明,并且只能直接从应用程序范围内读取.我有一个具有多个标签的控件,我想用来显示一些信息. 如何设置控件datacontext等于类? 代码: /// /// Class for Reading Program Information. /// public static class ProgramInfo { private static Assembly ProgramAssembly = Assembly.GetEntryAssembly( ); /// /// Get Program Name /// public static string ProgramName { get { return ProgramInfo.Progr
2 2024-04-15
编程技术问答社区
静态方法中的变量是否因为在c#中处于静态作用域内而自动成为静态?
public static void DoSomething() { int a; string b; //..do something } 在上面的示例中,我声明了两个变量. 它们会变得静态,因为包含它们的方法是静态的? 解决方案 尽管在C中可用,但是C#中不支持静态局部变量. 如果您想要局部静态变量等效物,则可以在类上创建一个实例变量或静态变量.否则,请考虑该方法本身是否属于静态类,以及它是否应该是其他类型的一部分. 其他解决方案 否.只有该方法是静态的,但不是变量. 来自msdn: c#不支持静态局部变量(在方法范围中声明的变量). 如果您想在静态成员中具有静态变量,请在静态方法之外进行声明, private static int _var = 0; public static void SampleMethod() { _var++; } 其他解决方案 来自 c#不支持静态变量(变量为 在方法范围中声明).
0 2024-04-15
编程技术问答社区
C#-静态方法中的参数是线程安全的吗?
此方法线程安全吗?似乎不是... public static void Foo(string _str, Guid _id) { _str = _str + _id.ToString(); /* Do Stuff */ return } 解决方案 在这种情况下,参数是两个不变的值.在方法中,只有一个线程在一组参数上运行,因为调用该方法的多个线程将每个线程都有自己的堆栈和执行上下文,这意味着每个线程都有自己的独立参数和本地变量集,因此没有其他线程可能会影响这些变量. 因此,这是与这两个变量有关的完全安全 . 请注意,Ref 传递的参数不一定是安全的,因为这可能允许在两个或多个线程之间共享一个变量,这将需要同步. 另外,如果您传递了不变的参考类型实例(即自定义类)作为参数,则该类的内部状态将需要同步,因为它可能会被多个线程使用. 引用本身将是线程安全的,因为它作为副本传递(除非使用ref通过). 其他
0 2024-04-15
编程技术问答社区