private const int TheAnswer = 42;
Run Code Online (Sandbox Code Playgroud)
但有时我们需要从Windows API中表示已存在的常量.
例如,我不知道如何命名:
/// <summary>
/// With this style turned on for your form,
/// Windows double-buffers the form and all its child controls.
/// </summary>
public const int WS_EX_COMPOSITED = 0x02000000;
Run Code Online (Sandbox Code Playgroud)
我该怎么命名呢?
保持它WS_EX_COMPOSITED可以让我快速将它与WinAPI相关联,但这是错误的.
一些选择:
WsExComposited - 太匈牙利人了Composited - 太短WsExenum with Compositedin it - 仍然是匈牙利人ExtendedWindowsStyles.Composited - 班级常数?枚举?应该指出的是,良好命名的目标是:
我在.NET中的图像缩放有问题.我使用标准的Graphics类型来调整图像大小,如下例所示:
public static Image Scale(Image sourceImage, int destWidth, int destHeight)
{
Bitmap toReturn = new Bitmap(sourceImage, destWidth, destHeight);
toReturn.SetResolution(sourceImage.HorizontalResolution, sourceImage.VerticalResolution);
using (Graphics graphics = Graphics.FromImage(toReturn))
{
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.DrawImage(sourceImage, 0, 0, destWidth, destHeight);
}
return toReturn;
}
Run Code Online (Sandbox Code Playgroud)
但是我对调整大小的图像有一个很大的问题:它们有灰色和黑色边框,制作没有图像的图像非常重要.
它们为什么出现以及我能做些什么使它们消失?
样本输出:

我读过Robert Martin的"清洁代码",它在80年代的Emacs中已经能够录制和播放你的编码会话.
我刚刚意识到我从这种练习中学到了多少,我很想了解自己!
但是我真的不认为录制屏幕(如视频)会非常有效,特别是因为Visual Studio已经无法忍受的速度慢,而且在播放器中寻找视频也很无聊.
相反,有一些插件可以记录我编码的内容(所以不是调试和视觉设计师等)真的很棒,并且可以回放给我看看我有多吮吸和在哪里.
这可能吗?
编辑:只是从书中引用,以显示这可能是多么有趣:
鲍勃进入模块.
他向下滚动到需要改变的功能.
考虑到他的选择,他停顿了一下.
哦,他正在向上滚动到模块的顶部以检查变量的初始化.
现在他向下滚动并开始输入.
哎呀,他正在抹掉他打字的东西!
他再次打字.
他再次擦掉它!
他输入了其他一半的东西但随后删除了!
他向下滚动到另一个函数,该函数调用他正在改变的函数以查看它是如何被调用的.
他向上滚动并键入他刚删除的相同代码.
他停顿了一下.
他再次删除了那段代码!
他弹出另一个窗口,看着一个子类.这个功能被覆盖了吗?
...
我正在创建一个库,我经常检查Closure Compiler输出的结果,看看它是如何做的(我确实有单元测试,但我仍然希望看到编译代码以获得更好的压缩方式的提示).
所以,我发现了这段非常奇怪的代码,这是我以前从未见过的.
variable : {
some();
code()
}
Run Code Online (Sandbox Code Playgroud)
注意:这不是对象文字!此外,没有?任何地方,将使它一个?:条件.
该代码位于常规功能块(IIFE)中.
variable在这种情况下,是一个未定义的变量.没有任何代码可以将它变为真,假,或其他任何东西,只是为了确保,我把它console.log放在那里,的确,我得到了一个ReferenceError.
请注意我也在IE8中测试我的代码,所以这不仅仅是在现代浏览器中.它似乎是标准的,普通的旧javascript.
所以让我们试一试吧.点击Chrome的控制台,我得到了这个:
undeclaredVariable:{console.log('does this get logged?')} // yes it does.
trueValue:{console.log('what about this?')} // same thing.
falseValue:{console.log('and this?')} // same thing.
Run Code Online (Sandbox Code Playgroud)
但是之后...
(true):{console.log('does this work too?')} // SyntaxError: Unexpected token :
Run Code Online (Sandbox Code Playgroud)
...和...
so?{console.log('is this a conditional?')}:{alert(123)} // Unexpected token .
Run Code Online (Sandbox Code Playgroud)
那它是做什么的?
thisThing:{console.log('is used to declare a variable?')}
thisThing …Run Code Online (Sandbox Code Playgroud) 这种情况对于你们中的一些人来说可能并不完全不常见:你们有一些功能要放在一个类中,但是这个类的完美名称(*)是由System命名空间中的一个类或其他不属于你的命名空间/类所占用的.你在using/ import.
(*)完美我的意思是小巧,简洁和清晰的名字.
例如,我有一个Utils类Diagnostics(主要是debug utils)类和一个Drawing类.我可以:
DrawingUtils类和一个DiagnosticsUtils类,但这只是闻起来像坏结构.我认为选项1-3并不乐观:(
由于我选择的答案并没有明确地解决问题(我也不这样做),我建议那些面临同样情况的人要问自己:你会经常使用冲突的BCL类/命名空间吗?如果不是,那么让你的名字发生冲突(就像我在诊断中所做的那样).如果是,请添加一个限制类/命名空间可能性的单词.
在实践中,这意味着::
"Drawing"绘制的东西.
"MyCustomControlDrawing":东西借鉴只上MyCustomControl.例如:"WidgetDrawing".
c# vb.net naming-conventions classname fully-qualified-naming
我有一个图标,我想用CSS改变颜色.它是在CSS中内联的数据优化的SVG中.
通常情况下,这是不可能的.这就是图标字体被发明的原因; 它们相对于SVG的主要优势是能够从CSS 接收color和text-shadow规则.好吧,CSS过滤器现在能够同时处理任意图像,现在它们可以在所有Blink,Webkit和Gecko浏览器中使用,并且可以用于未来的IE/Spartan.
甲text-shadow更换是容易的; 只需使用drop-shadow过滤器.
然而,尽管所有必要的滤镜都在这里,但是将图像着色为特定的颜色已经证明是非常棘手的.到目前为止,我的理论如下:
contrast(0)转整个图像变成纯灰,同时保持alpha通道(Mozilla的维基说,它会变成黑色,但在所有的浏览器就变成灰色,必须是一个错字).sepia(1),因为我们无法对灰度图像上的色调/饱和度进行操作.这样可以确保整个图像由我们可以进行数学运算的参考颜色组成; 特别是#AC9977.在这一点上,我们应该能够将整个图像从现在的实体#AC9977转变为我们想要使用的任何颜色hue-rotate,saturate并且brightness.
首先,浏览器使用什么颜色坐标?如果它使用HSL(亮度)或HSV(值),我无法确定规格是否合理,但由于HSB(亮度)是HSV的另一个名称,我想它正在使用HSV.此外,使用像饱和颜色(而不是使它们变成白色)这样的东西,这将在HSV而不是HSL中发生.brightness(999)
根据这一假设,我们将按如下方式进行:
#AC9977我们想要的颜色和颜色之间的差异,并使用hue-rotate.saturate.brightness.由于这不是手工完成的事情,我们将使用LESS预处理器:
.colorize(@color) {
@sepiaGrey: #AC9977;
@hOffset: (hsvhue(@color) - hsvhue(@sepiaGrey)) * 1deg;
@sRatio: …Run Code Online (Sandbox Code Playgroud) 我应该在返回实现IDisposable的对象后调用.Dispose()吗?
myDisposableObject Gimme() {
//Code
return disposableResult;
disposableResult.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
换句话说,对象是我返回副本,还是对象本身?谢谢 :)
我有一个方向枚举:
Public Enum Direction
Left
Right
Top
Bottom
End Enum
Run Code Online (Sandbox Code Playgroud)
有时我需要得到逆,所以写起来似乎很好:
SomeDirection.Inverse()
Run Code Online (Sandbox Code Playgroud)
但我不能把一个方法放在枚举上!但是,我可以添加一个扩展方法(VS2008 +).
在VB中,扩展方法必须在模块内.我真的不喜欢那些模块,我正在尝试编写一个(适度)简单的类,我可以在一个文件中共享它以插入其他项目.
模块只能驻留在文件/命名空间级别,所以我现在在文件的底部有一个:
Public Class MyClass
'...'
End Class
Public Module Extensions
<Extension()> _
Public Function Inverse(ByVal dir As Direction) As Direction
'...'
End Function
End Module
Run Code Online (Sandbox Code Playgroud)
它有效,"如果没有破坏,就不要修理它",但我很想知道我做错了,并且有更好的方法,更少的样板.也许在.NET 4中?
最后,我知道我可以编写一个行为类似于枚举的结构,但这看起来更加倒退.
我的代码获取CA1303预警从Microsoft.Globalization"不要通过文字本地化参数",但我的代码实际上并没有通过文字:
private void MyForm_Load(object sender, EventArgs e)
{
UpdateTitle();
}
private void UpdateTitle()
{
Version version = Assembly.GetExecutingAssembly().GetName().Version;
CultureInfo culture = CultureInfo.CurrentUICulture;
this.Text = String.Format(culture, "{0} v{1}.{2} Alpha r{3}", this.Text, version.Major, version.Minor, version.Build);
}
Run Code Online (Sandbox Code Playgroud)
每次加载时,此代码都会将表单的标题设置为类似的内容:
MyFormNameAsSetInTheDesigner v0.1 Alpha r123
(version.build实际上包含SVN修订版,在每次提交时自动更新,我不使用,revision因为我的版本控制方案只使用3个数字,major.minor.revision)
但这会触发上述警告,因为它认为我是从字符串文字设置标题栏文本.实际上,我已经Localizable = True在设计器中进行了设置,以便从资源表中获取字符串.
我不想静态设置表单的标题,因为(特别是在alpha和beta阶段)我希望它具有动态版本号.
如果我从任意URL(本地或远程)加载图像,并且不想使用javascript或服务器端处理,是否可以使用CSS从客户端锐化它?
.net ×4
c# ×4
vb.net ×3
css3 ×2
image ×2
boilerplate ×1
classname ×1
client-side ×1
colon ×1
color-space ×1
constants ×1
css ×1
css-filters ×1
dispose ×1
enums ×1
fxcop ×1
hsv ×1
idisposable ×1
javascript ×1
keylogger ×1
localization ×1
pinvoke ×1
profiling ×1
scaling ×1
syntax ×1
winapi ×1
winforms ×1