Tag: 静态

为什么不处理/关闭SqlConnection?

鉴于方法: internal static DataSet SelectDataSet(String commandText, DataBaseEnum dataBase) { var dataset = new DataSet(); SqlConnection sqlc = dataBase == DataBaseEnum.ZipCodeDb ? new SqlConnection(ConfigurationManager.AppSettings[“ZipcodeDB”]) : new SqlConnection(ConfigurationManager.AppSettings[“WeatherDB”]); SqlCommand sqlcmd = sqlc.CreateCommand(); sqlcmd.CommandText = commandText; var adapter = new SqlDataAdapter(sqlcmd.CommandText, sqlc); adapter.Fill(dataset); return dataset; } 为什么sqlc(SqlConnection)在调用方法超出范围后没有处理/关闭,或者sqlc没有更多的引用? 编辑1:即使将其包装在使用中,我仍然可以看到连接使用(我已关闭连接池): SELECT DB_NAME(dbid) as ‘Database Name’, COUNT(dbid) as ‘Total Connections’ FROM […]

在C#中确保静态方法的线程安全性

我有一些我目前在静态类/方法中的代码,但我想检查它是否是线程安全的。 从我读过的内容来看,我认为这应该没问题,但我脑海中的一些事情却说它可能不是。 我的网页的数据处理阶段使用外部Web服务来创建订单记录,这可能非常慢:可能是30-40秒,可能是5或10分钟(这不在我的手中)所以我要开火返回页面返回给用户,然后启动新线程,然后在处理完成后通过电子邮件发送给用户。 这是一个静态类/方法。 如果我的所有对象都是在特定方法中创建的(除了系统默认值,这是常见的)该方法应该是线程安全的,不应该。 所以,例如,如果我有 public static class ProcessOrder() { public static int GetOrderMaxSize() { return (….gets and parses ConfigurationManager.AppSettings[“MaxOrderSize”]…); } public static bool CreateOrder(Order order) { XmlDocument xmlDoc = GetOrderXML(order); bool check = false; using (CreateOrderXML.Create xmlCo = new CreateOrderXML.Create()) { xmlCo.Timeout = 60000; System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); string xmlString = “”; […]

除了创建帮助器之外,创建静态方法的理想情况(实际示例)是什么?

我只是想了解静态方法所服务的目的以及我可以创建静态方法的理想情况,除了有些人会说静态方法用于创建帮助器。 考虑我有一个网站,将在我的公司使用,就像人力资源管理系统,如网站。 现在,管理员登录系统管理员后,将看到员工列表。因此,该方法很简单,除了从员工表中获取员工的所有详细信息,并将在网站上显示这些方法,此方法将在业务中定义在.net中访问这样的层: public class EmployeeBal { public List GetAllEmployees() { return Select * from Employee } } 这就是我如何从我的应用程序中调用此方法。对于Eg(.aspx页面或mvc控制器等….) var employeeBal= new EmployeeBal(); employeeBal.GetAllEmployees(); 所以我的问题是我应该将此方法创建为静态方法还是非静态方法? 注意:这只是方法的一个示例,此方法位于我的业务访问层中 。 考虑我有一个电子商务网站 ,在主页上我显示一些产品列表,并在访问该网站时,每个用户都可以看到该产品列表。 所以我的function与上面在Business acess层中定义的相同: public class ProductBal { public List DisplayProductonHomePage() { return Select * from Products } } 所以我的问题与是否将此方法创建为静态方法或非静态方法相同,如果同时有超过10个用户同时访问此网站会发生什么,那么这种方法的行为/含义是什么? 如果我们将此方法声明为静态,这个方法是否会满足每个用户的目的? 有人可以简单地解释每个场景来回答这个问题吗???

C#:为派生类inheritance单独的静态成员

我的问题简要说明: class A { /* Other stuff in my class*/ protected static staticMember; } class B : A { /* Other stuff in my class*/ // Will have A.staticMember but I want B.staticMember (same type) } class C : A { /* Other stuff in my class*/ // Will have A.staticMember but I want C.staticMember […]

C# – 单例模式

正如你从我的昵称中看到的那样,我是新手,实际上是在学习Singleton模式,我遇到了一个问题。 在我了解到静态构造函数总是在标准构造函数之前执行之前,但在下面的代码中,结果是不同的,首先我看到“Insta”字符串然后是“静态”,为什么会发生? sealed class Singleton { private static readonly Singleton instance; private Singleton() { Console.WriteLine(“Insta”); } static Singleton() { instance = new Singleton(); Console.WriteLine(“Static”); } public static Singleton Instance { get { return instance; } } } class Program { static void Main() { Singleton s1 = Singleton.Instance; } }

每个用户的静态对象是否唯一?

我有一个类似这样的.net应用程序(c#) public partial class _Default : System.Web.UI.Page { #region initial variables setup private static exam theExam; #endregion protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { string userid = Request.Querystring[“user”].ToString(); theExam = new exam(userid, “some values”); } } // rest of code. 现在我的问题是,如果用户105登录了一个考试实例,则创建了一个实例,并在顶部分配静态声明。 如果用户204然后从另一台计算机登录,那么即使在用户105的计算机上,顶部的静态对象是否也获得204的值?

如何访问generics类型的静态方法

public class BusinessObjects where O : BusinessObject { void SomeMethod() { var s = O.MyStaticMethod(); // <- How to do this? } } public class BusinessObject { public static string MyStaticMethod() { return "blah"; } } 是否有正确的面向对象的方法来实现这一点,还是我需要求助于反思? 编辑:我试图过于简单化这个问题,并且遗漏了一个重点。 MyStaticMethod使用reflection并需要派生类型来返回正确的结果。 但是,我刚刚意识到我设计中的另一个缺陷是我无法使用静态虚拟方法,我认为这就是我需要的。 看起来我需要找到另一种解决这个问题的方法。

跨进程C#访问静态成员

好的,这是问题所在。 我有一个第三方c#lib,我正在编写一个关于它的工具。 所以我想从另一个应用程序监控一些静态容器,但当然我无法在我的应用程序域中访问它们。 一个简单的例子是: namespace DefinedInAsembly1 { public class Resource { public static IList DateTimes {get;set;} } } namespace DefinedInAssembly2 { class RunningProgram { static void Main(string[] args) { while(true) { Resource.DateTimes.Add(DateTime.Now); Thread.Sleep(10000); } } } } namespace DefinedInAssembly3 { class ToolProgram { static void Main(string[] args) { //Accessing Resource.DateTimes with the values inserted from […]

访问静态代码块中的“this”

最近我发现自己写了很多类似于: public class MyTypeCodes { public static MyTypeCode E = new MyTypeCode{ Desc= “EEE”, Value = “E” }; public static MyTypeCode I = new MyTypeCode { Desc= “III”, Value = “I” }; private static readonly Lazy<IEnumerable> AllMyTypeCodes = new Lazy<IEnumerable>(() => { var typeCodes = typeof(MyTypeCodes) .GetFields(BindingFlags.Static | BindingFlags.Public) .Where(x => x.FieldType == typeof (MyTypeCode)) […]

避免“通过派生类型访问类型的静态成员”

我相信这纯粹是一个Resharper警告,但它背后的推理( 这里解释)很有道理。 Greg Beech所说的是你可以从兄弟类中调用基类静态方法……在他的例子中他使用: var request = (FtpWebRequest)HttpWebRequest.Create(…) ……这是误导性的。 那么有一种设计可以让我在以下课程中避免这种警告吗? public abstract class BaseLog { // I omitted several other properties for clarity protected static string category; protected static TraceEventType severity; static BaseLog() { category = “General”; severity = TraceEventType.Information; } public static void Write(string message) { Write(message, category, severity); } // Writes to a […]