我有一个静态类,它包含winspool中的一些本机方法:
public static class WinSpool
{
[DllImport("winspool.drv")]
public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault);
...
//some more methods here
}
Run Code Online (Sandbox Code Playgroud)
我想模仿它们进行单元测试,但是找不到这种模式.(每个人都避免使用静态类吗?)
请考虑以下代码
class A {
static class B{
int a = 0;
}
public static void main(String argc[]) {
B var1 = new B();
B var2 = new B();
var1.a = 5;
var2.a = 6;
System.out.println(var1.a+" and "+var2.a);
}
}
Run Code Online (Sandbox Code Playgroud)
它输出5和6.静态成员只加载一次.但输出与该语句相矛盾.所以静态类的概念肯定与静态数据成员不同.那么静态类的静态意味着什么
我想听听您对以下情况的意见和建议:
我已经定义了一个自定义的ActionFilter,它可以完成一些工作并带来一些价值.我想在控制器动作和模型中使用该值.
现在,我可以使用TempData将此值从ActionFilter传递给任何控制器操作方法,然后将此值分配给传递给返回视图的所有模型.
我相信它会起作用,但是这个TempData会在会话中出现,当时没有人真正需要它.该值应该在单个请求期间专门用于代码,之后它会有效地使其无效.
我提出了两个选择:
在ActionFilter中,我在OnActioExecuting()的TempData中设置了这个值,然后在OnActionExecuted()中删除它.我是否正确理解,当调用OnActionExecuted时,控制器操作已完成,响应已经生成,并且此TempData内容尚未进入会话YET?
在我的任何自定义静态类(逻辑)中,我只为这个值定义一个公共属性,并在需要时使用它.在OnActionExecuting()和实际执行控制器方法之间,这个静态字段是否会丢失?在服务器上的请求处理期间是否还有其他问题可能会丢失此值?
还有其他/更好的选择我还没考虑过吗?
当我尝试为File类创建一个扩展方法时,我收到一个错误,告诉我我不能这样做,因为该类是静态的.但是,我不明白为什么这会停止创建扩展方法,有什么含义?
谢谢
我知道,好朋友不是"对抗"问题的粉丝,但是......甚至还有一点点重述,对比部分仍然存在,所以,为什么要隐藏它.
基本上,我想,当知道我为什么要使用一个单身或静态类,有什么可以提供单一个静态类倾斜,反之亦然.
很长一段时间我都使用了两者,我无法看到为什么我不应该使用其中一个.
谢谢.
大家好,圣诞快乐!
我在效率方面遇到了一些麻烦,我希望StackOverflow社区可以帮助我.
在我的一个(静态)类中,我有一个从我的数据库中获取大量信息的函数,解析该信息并将其放入格式化的数组中.这个类中的许多函数依赖于那个格式化的数组,并且在整个类中,我多次调用它,这意味着应用程序在一次运行中多次经历这个过程,我假设它不是很有效.所以我想知道是否有更有效的方法可以做到这一点.有没有办法让我将格式化的数组存储在静态函数中,这样我每次需要格式化数组的信息时都不必重新执行整个过程?
private static function makeArray(){
// grab information from database and format array here
return $array;
}
public static function doSomething(){
$data = self::makeArray();
return $data->stuff;
}
public static function doSomethingElse(){
$data = self::makeArray();
return $data->stuff->moreStuff;
}
Run Code Online (Sandbox Code Playgroud) 我在 java 中使用静态嵌套类用于特定用例。下面显示了相同的最小示例:
public class Foo {
static int fooInner = getInner(); // CASE 1
private static class StaticFoo {
int fooInner = getInner(); // CASE 2
public int useFooInner(){
System.out.println(fooInner);
//do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是案例 1 中的内存分配与案例 2 中的内存分配有何不同?或者是一样的?如果我也将 case 2 变量设为静态会怎样。内存使用会有所不同吗?
注意:请不要提及会发生阴影。虽然我已经将两个变量都放在那里,但它是一个“OR”案例,这就是“CASE”的原因。
PS:感觉内存使用量应该是一样的。由于嵌套类是静态的,因此不会为每个对象创建它,因此实例变量fooInner (案例 2)也将只创建一次。因此, getInner() 函数将只运行一次。但这只是抽象层面+直觉。更具描述性的答案将不胜感激!
我有条件扩展c#中的Enumerable类来添加接受长参数的新Range方法.我无法定义这样的方法
public static IEnumerable<long> Range(this Enumerable source, long start, long length)
{
for (long i = start; i < length; i++)
{
yield return i;
}
}
Run Code Online (Sandbox Code Playgroud)
由于扩展方法只能通过其对象访问.它给了我一个错误
'System.Linq.Enumerable':静态类型不能用作参数
我们可以澄清一下如何做到这一点
注意:我知道我们可以在没有扩展方法的情况下轻松解决这个问题,但我需要这个Enumrable类.
我正在尝试制作一个倒计时程序,我可以开始和停止,并在需要时将倒计时的值设置为10分钟.
但我收到的错误我不太明白.我不是那样的C#,所以这里是代码:
有人可以帮我一点吗?想想我在框架3.0上运行什么?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;
namespace PauseMaster
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
private DateTime endTime;
private void btnStartStop_Click(object sender, EventArgs e)
{
if(btnStartStop.Text == "START")
{
int hours = int.Parse(string.IsNullOrEmpty(txtCountFromHour.TextBox.Text) || txtCountFromHour.TextBox.Text == "timer" ? "0" : txtCountFromHour.TextBox.Text);
int mins = int.Parse(string.IsNullOrEmpty(txtCountFromMin.TextBox.Text) || txtCountFromMin.TextBox.Text == "minutter" ? "0" …Run Code Online (Sandbox Code Playgroud) 我是一位使用C#的C ++程序员,据说我不使用静态类。我了解在C#中,如果该类只有静态成员,那么它应该是静态的。(我的类只有静态成员)您能解释一下使用静态类可能会引起问题吗?我们何时真正应该使用它们?
谢谢
static-classes ×10
c# ×4
.net ×3
java ×2
static ×2
architecture ×1
asp.net-mvc ×1
class ×1
database ×1
java-8 ×1
mocking ×1
persistent ×1
php ×1
singleton ×1