在C#中,标记类静态的目的是什么?
如果我有一个只有静态方法的类,我可以将该类标记为静态.为什么我要将类标记为静态?如果所有方法都是静态的,并且我打算永远不会添加非静态方法,我是否不想将类标记为静态?
我环顾四周,看到了一些类似的问题,但没有一个像这样.
什么时候应该将Windows注册表用于每用户状态,何时应该使用文件系统,特别是用户的AppData文件夹?(例如,C:\ Users\USERNAME\AppData).隔离存储在哪里?
是否有一个相当坚定的规则,或者它只是一个模糊的事情,如"使用注册表,直到它成为太多的数据存储在注册表中".或者"使用你想要的任何东西."
是否存在影响决策的Windows徽标要求?
如果我使用AppData目录,如何在Local,Roaming和LocalLow之间进行选择?
编辑:我刚刚注意到这些类似的问题:
我将总结回复.
通常代码类似于:
<html>
<head>
<style type="text/css">
body { font-size:12pt; font-family: Arial;}
....
</style>
<script type="text/javascript" src="jquery.1.3.2js"></script>
<script type="text/javascript">
<!--
$(document).ready(function(){
...
});
...
-->
</script>
<meta ... />
</head>
<body>
<div>
<p>
....
</p>
...
</div>
....
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我喜欢javascript模式的合成文字突出显示和缩进.同样适用于HTML的sgml-mode.此外,我在打开的标签上自动完成.Css模式并不是那么重要,所以它不是一个优先事项.
这是3种不同的语言和3种模式.现在我在编辑不同部分时手动交换模式.这有点工作.
谁有更好的方法?
我见过没有Visual Studio的ASP.NET MVC,它问, 是否有可能在不使用Visual Studio的情况下生成基于ASP.NET MVC的网站?
接受的答案是 肯定的.
好的,下一个问题: 怎么样?
这是一个类比.如果我想创建一个ASP.NET Webforms页面,我会加载我最喜欢的文本编辑器,创建一个名为Something.aspx的文件.然后我插入到该文件中,一些样板:
<%@ Page Language="C#"
Debug="true"
Trace="false"
Src="Sourcefile.cs"
Inherits="My.Namespace.ContentsPage"
%>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Title goes here </title>
<link rel="stylesheet" type="text/css" href="css/style.css"></link>
<style type="text/css">
#elementid {
font-size: 9pt;
color: Navy;
... more css ...
}
</style>
<script type="text/javascript" language='javascript'>
// insert javascript here.
</script>
</head>
<body>
<asp:Literal Id='Holder' runat='server'/>
<br/>
<div id='msgs'></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后我还创建了Sourcefile.cs文件:
namespace My.Namespace
{
using System;
using System.Web;
using System.Xml; …Run Code Online (Sandbox Code Playgroud) 使用.NET,我可以编写一个托管脚本引擎的应用程序,该脚本引擎符合Microsoft的IActiveScript约定.这包括来自Microsoft的JScript和VBScript,以及PerlScript和RubyScript,我不知道第三方还有什么.
在代码中执行此操作的方法是这样的:
Type engine = Type.GetTypeFromProgID(progId, true);
_engine = Activator.CreateInstance(engine) as IActiveScript;
Run Code Online (Sandbox Code Playgroud)
其中progId可以采用Javascript,JScript,ECMAScript,VBScript等值.运行cscript.exe时可以执行类似的操作,在命令行中使用该//E选项指定progId .例如,这个命令:
cscript.exe <file> //e:JScript
Run Code Online (Sandbox Code Playgroud)
..将通过JScript引擎运行指定的文件,无论其扩展名如何.
在我的机器上,如果我查看HKLM\SW\Classes\,三个progIds {Javascript,JScript,ECMAScript}都指向相同的CLSID,我猜这是JScript 5.8脚本引擎:{f414c260-6ac0-11cf-b6d1-00aa00bbbb58}
是否有ProgId或CLSID我可以指定运行IE9的Javascript引擎,又称"Chakra"?
IE9的引擎是否仍然被IActiveScript加载?
Microsoft的文档表明它确实如此,但没有指定ProgId或CLSID.
该应用程序使用client.PostAsync()发送帖子.我希望它不要遵循302重定向.
怎么样?
我想我可以AllowAutoRedirect按照这个答案中的描述进行设置.
但是如何HttpWebRequest在PostAsync()调用中使用?
伙计们,我正在尝试在C#中实现一个创建WPA共享密钥的PBKDF2函数.我在这里找到了一些:http://msdn.microsoft.com/en-us/magazine/cc163913.aspx似乎产生了一个有效的结果,但是它的一个字节太短......而且错误的PSK值.
为了测试输出,我将其与此进行比较:http://www.xs4all.nl/~rjoris/wpapsk.html或http://anandam.name/pbkdf2/
我确实找到了一种方法来使用C#内置库来调用Rfc2898DeriveBytes.使用这个,我得到一个有效的输出:
Rfc2898DeriveBytes k3 = new Rfc2898DeriveBytes(pwd1, salt1, 4096);
byte[] answers = k3.GetBytes(32);
Run Code Online (Sandbox Code Playgroud)
现在,我使用Rfc2898DeriveBytes的一个限制是"盐"必须是8个八位字节长.如果它更短,则Rfc2898DeriveBytes会抛出异常.我想我所要做的就是将盐(如果它更短)填充到8个字节,我会很好.但不是!我已经尝试了几乎所有填充与较短盐的组合,但我不能复制我从上面这两个网站得到的结果.
那么底线是,这是否意味着Rfc2898DeriveBytes只是不能使用短于8个字节的源盐?如果是这样,有没有人知道我可以使用哪些C#代码为WPA预共享密钥实现PBKDF2?
如果这是重复,请原谅; 我很确定以前会问这个问题,我看了一下,但没有找到傻瓜.
我可以在C#中创建一个静态局部变量吗?如果是这样,怎么样?
我有一个很少使用的静态私有方法.静态方法使用正则表达式,我想初始化一次,并且仅在必要时.
在C中,我可以使用本地静态变量来完成此操作.我可以用C#做这个吗?
当我尝试编译此代码时:
private static string AppendCopyToFileName(string f)
{
static System.Text.RegularExpressions.Regex re =
new System.Text.RegularExpressions.Regex("\\(copy (\\d+)\\)$");
}
Run Code Online (Sandbox Code Playgroud)
......它给了我一个错误:
错误CS0106:修饰符'static'对此项无效
如果没有本地静态变量,我想我可以通过创建一个小的新私有静态类来近似我想要的,并将方法和变量(字段)插入到类中.像这样:
public class MyClass
{
...
private static class Helper
{
private static readonly System.Text.RegularExpressions.Regex re =
new System.Text.RegularExpressions.Regex("\\(copy (\\d+)\\)$");
internal static string AppendCopyToFileName(string f)
{
// use re here...
}
}
// example of using the helper
private static void Foo()
{
if (File.Exists(name))
{
// helper gets JIT'd first time through this …Run Code Online (Sandbox Code Playgroud) 这个答案 - jQueryUI:我如何自定义格式化Autocomplete插件结果? - 描述如何对jqueryUI自动完成小部件进行monkeypatch,以便以特定方式显示内容.它使用的方法是替换上的函数$.ui.autocomplete.prototype.
这意味着所有自动完成小部件都将获得此修补程序.
有没有办法只为一个输入元素修补自动完成小部件?它是什么?
当我检查时$('$input').autocomplete,我没有看到任何自动完成文件(_renderItem,_renderMenu,_search等).
相关:
我应该在我的应用程序中包含命令行模式吗?
如何获取父进程标准输出?
控制台应用程序可以检测它是否已从资源管理器运行?
我想构建一个控制台应用程序,通常从命令行运行.
但是,当它从资源管理器中双击(而不是从cmd.exe提示符运行)时,我希望该程序不显示控制台窗口.
我想避免这个:
替代文字http://i36.tinypic.com/1088p5s.jpg
可能吗?
编辑我想另一种问题是,程序是否有可能知道它是如何被调用的 - 无论是通过双击还是通过命令行?
我在Windows上使用.NET.
编辑2:从这篇Old New Thing博客文章中我学到了一些好东西.这就是我现在所知道的......
在Windows中,EXE文件标记为GUI或非GUI.使用csc.exe,可以使用/target:winexe或选择它/target:exe.在执行流程中的第一条指令之前,Windows内核会设置执行环境.此时,如果EXE标记为GUI,则内核将进程的stdin/stdout设置为NULL,如果非GUI(命令行),则内核创建控制台并将进程的stdin/stdout设置为安慰.
启动进程时,如果没有stdin/stdout(== /target:winexe),则立即返回调用.因此,从cmd.exe启动gui应用程序,您将立即返回cmd提示符.如果存在stdin/stdout,并且从cmd.exe运行,则父cmd.exe将等待进程退出.
"立即返回"很重要,因为如果您编写GUI应用程序以附加到其父控制台,您将能够执行console.writeline等.但cmd.exe提示是活动的.用户可以键入新命令,启动新进程等.换句话说,从winexe,只需附加到父控制台,AttachConsole(-1)不会"变成"控制台应用程序.
此时我认为允许应用程序使用控制台的唯一方法是从cmd.exe调用它,而不是在双击时使用它,就是将exe定义为常规控制台exe(/target:exe),并且如果合适,在启动时隐藏窗口.您仍然会暂时显示控制台窗口.
我仍然没有想过如何知道它是从explorer或cmd.exe启动的,但我越来越近了..
解答
无法构建不显示控制台窗口的控制台应用程序.
这是可能的构建非常迅速隐藏其窗口控制台应用程序,但不能如此之快,这是因为如果从来没有出现的窗口.
现在,为了确定是否从资源管理器启动了一个控制台应用程序,有些人建议查看它正在运行的控制台
(来自mgb的答案和知识库文章99115):
int left = Console.CursorLeft;
int top = Console.CursorTop;
bool ProcessWasRunFromExplorer = (left==0 && top==0);
Run Code Online (Sandbox Code Playgroud)
这告诉您该进程是否在其自己的控制台中启动,而不是它是否是资源管理器.在资源管理器中双击可以执行此操作,但是应用程序内的Start.Process()也会执行相同的操作.
如果要以不同方式处理这些情况,请使用此方法来了解父进程的名称:
System.Console.WriteLine("Process id: {0}", Process.GetCurrentProcess().Id);
string name = Process.GetCurrentProcess().ProcessName ;
System.Console.WriteLine("Process name: {0}", …Run Code Online (Sandbox Code Playgroud)