Tag: 静态方法

是否有奇怪的重复模板模式的替代品?

在过去的几周里,我以奇怪的重复模板模式给自己带来了一些麻烦。 继我的这两个问题之后: 按值检索自定义枚举类的正确方法是什么? 当第一次访问静态类是基类上的静态方法时,为什么我的静态对象没有被实例化? 如何改进以下示例: public class DocketType : Enumeration { public static DocketType Withdrawal = new DocketType(2, “Withdrawal”); public static DocketType Installation = new DocketType(3, “Installation”); private DocketType(int docketTypeId, string description) : base(docketTypeId, description) { } } 我想要一个静态方法,我不必在Enumeration类中重复: public abstract class Enumeration : IComparable where TEnum : Enumeration { protected Enumeration(X value, Y displayName) […]

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

我只是想了解静态方法所服务的目的以及我可以创建静态方法的理想情况,除了有些人会说静态方法用于创建帮助器。 考虑我有一个网站,将在我的公司使用,就像人力资源管理系统,如网站。 现在,管理员登录系统管理员后,将看到员工列表。因此,该方法很简单,除了从员工表中获取员工的所有详细信息,并将在网站上显示这些方法,此方法将在业务中定义在.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个用户同时访问此网站会发生什么,那么这种方法的行为/含义是什么? 如果我们将此方法声明为静态,这个方法是否会满足每个用户的目的? 有人可以简单地解释每个场景来回答这个问题吗???

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

我相信这纯粹是一个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 […]

具有相同名称的静态方法和扩展方法

我创建了扩展方法: public static class XDecimal { public static decimal Floor( this decimal value, int precision) { decimal step = (decimal)Math.Pow(10, precision); return decimal.Floor(step * value) / step; } } 现在我尝试使用它: (10.1234m).Floor(2) 但编译器说Member ‘decimal.Floor(decimal)’ cannot be accessed with an instance reference; qualify it with a type name instead Member ‘decimal.Floor(decimal)’ cannot be accessed with an instance […]

静态方法是否共享其本地变量以及在不同线程的并发使用期间会发生什么?

C#问题 – 我试图确定是否可以使用静态方法,在方法中它确实使用了一些局部变量。 局部变量是否在方法的使用中“共享”? 例如,如果从不同的线程同时调用/使用静态方法会发生什么? 一个线程阻塞,直到另一个线程完成等吗? 也许通用的问题是,在线程应用程序中,何时“不”使用静态方法?

为什么我会使用静态方法进行数据库访问

所以今天我遇到了这个问题,我找不到一些有意义的解释是否有一些非主观的理由在数据库交互时使用静态方法。 现在我正在开发一个项目,其中所有内容都是通过存储过程完成的,例如我有一些常规方法,例如: public void Delete(int clientID) { //calling store procedure } 要么 public void Save(int clientID) { //calling store procedure } 但我也有: public static Client GetByID(int id) { //calling stored procedure } 要么 public static int AddNew(string firstName, string lastName…) { //calling store procedure } 因为我正在使用.NET大约9个月而且我一直只使用Entity Framework和Repository Pattern我无法回想起任何地方或任何使用静态方法的代码。 不适用于标准CRUD操作,也不适用于与数据库相关的更具体任务。 这是与访问数据库的特定方式有关的东西,是一些可以提供(甚至是非常小的)性能提升的实践,或者它只是开发人员的方法,我不应该在和何时不在我的数据库中使用静态方法相关的方法?

垃圾收集如何在对象引用上工作?

我对对象的垃圾收集过程感到困惑。 object A = new object(); object B = A; B.Dispose(); 通过仅在变量B上调用Dispose,创建的对象将不会被垃圾收集,因为对象仍被A引用。 现在,以下代码与上面的代码相同吗? public static image Test1() { Bitmap A = new Bitmap(); return A; } 现在我从其他方法调用这个静态函数。 public void TestB() { Bitmap B = Test1(); B.Dispose(); } 静态函数Test1返回对Bitmap对象的引用。 引用保存在另一个变量B中。通过调用B上的Dispose,B和object之间的连接丢失,但是从Test1传递的引用会发生什么。 它将保持活动状态,直到函数TestB的范围完成? 有没有办法处理从静态函数传递的引用?

静态与实例方法性能C#

我在ASP.NET Web应用程序中的公共类中声明了很少的全局方法。 我习惯以下列格式在公共类中声明所有全局方法 public static string MethodName(parameters) { } 我想知道它会如何影响性能观点? 哪一个更好? 静态方法还是非静态方法? 为什么它更好? http://bytes.com/topic/c-sharp/answers/231701-static-vs-non-static-function-performance#post947244指出: 因为,静态方法使用锁是线程安全的。 始终在内部执行Monitor.Enter()和Monitor.exit()以确保线程安全。 虽然http://dotnetperls.com/static-method声明: 静态方法在调用堆栈上调用通常比实例方法更快。 在C#编程语言中有几个原因。 实例方法实际上使用’this’实例指针作为第一个参数,因此实例方法将始终具有该开销。 实例方法也使用中间语言的callvirt指令实现,这会产生轻微的开销。 请注意,将方法更改为静态方法不太可能对雄心勃勃的性能目标有所帮助,但它可以帮助一点点,并可能导致进一步减少。 我有点困惑哪一个使用?

有没有办法强制C#类实现某些静态函数?

我正在开发一组实现通用接口的类。 我的库的使用者应该期望这些类中的每一个都实现一组静态函数。 无论如何,我可以装饰这些类,以便编译器将捕获其中一个函数未实现的情况。 我知道在构建消费代码时最终会被捕获。 我也知道如何使用一种工厂类解决这个问题。 只是想知道是否有任何语法/属性要求类上的静态函数。 Ed删除了“界面”这个词以避免混淆。