除少数情况外,所有属性都由字段(显式或隐式)备份.但是,类似DateTime.Today的属性是未由字段备份的计算属性(编辑:属性Guid.Empty和Math.E静态字段备份,我对这些属性不感兴趣).
在最佳实践或经验方面,这些无场属性应该是静态的,非静态的吗?
我知道意见各不相同,所以我想从众所周知的图书馆,书籍或你自己的经验中找到例子.最后,我希望在教室中找到"从现场"中使用的明确例子.
编辑:我理解语义与实现的讨论,我正在寻找的是真实世界的例子,清楚简明地解释每个案例(静态或非静态)的概念.
我有一个按钮:
<button type="submit" class="contact" onclick="click">
Run Code Online (Sandbox Code Playgroud)
我有ac#code后面的功能:
protected void click(object sender, EventArgs e)
{
contact_label.Text = "tester";
}
Run Code Online (Sandbox Code Playgroud)
并且我的页面上有一个标签:
<asp:Label id="contact_label"...
Run Code Online (Sandbox Code Playgroud)
麻烦的是当我点击按钮时没有调用'click'功能,为什么不呢?我该如何解决这个问题?
我们有一个引用Common-directory中文件的项目.无论何时打开或编译该项目,都会复制这些文件.由于时间戳更改,Subversion将其视为更改.我只想提交常规Common目录的新更改,或项目中的实际更改.不是编译器为我执行的自动复制.
如何将目录和文件保留在SVN中,但是防止这些不变更被视为变更?是否有一些处理这种情况的"最佳实践"或"首选"方式?
我正在我的一个应用程序中创建三个线程.我的要求是创建这三个线程并启动它们的方法不应该返回,除非执行所有这三个线程.
我尝试在所有三个线程上使用Join.但是,我观察到当我使用Join时,我的方法的总执行时间是所有三个线程的执行时间的总和.换句话说,它们是按顺序执行的.
我尝试使用ThreadState,但从MSDN和stackoverflow实现,ThreadState属性应仅用于调试目的,而不是用于实际编码.
我能做到这一点并保持执行并行的最佳方法是什么.
任何想法将不胜感激.提前致谢
我正在尝试建立一个"简单"的网络应用程序,根据美国海军的周长公式计算男性或女性身体脂肪%.此时我完成了大部分应用程序.但是,我无法弄清楚为什么我设置下面的公式的方式不起作用.其中两个值在.cs文件中以红色下划线标出.
我的公式:
TBBodyFat.Text = Convert.ToString(495 / (1.0324-.19077(Math.Log(Convert.ToDouble(TBWaist.Text)-Convert.ToDouble(TBNeck.Text)))+.15456(Math.Log(Convert.ToDouble(TBHeight.Text)))));
Run Code Online (Sandbox Code Playgroud)
原始示例:
%Fat=495/(1.0324-.19077(log(abdomen-neck))+.15456(log(height)))-450
Run Code Online (Sandbox Code Playgroud)
弹出两个带下划线的值(.19077和.15456):
struct System.Double Represents a double-precision floating-point number. Error: Method name expected
我需要的是:我有ac#代码,我想构建它以便在桌面上创建.bat文件.所以当我从桌面运行这个.bat文件时,它应该执行c#代码.
有没有办法在编译之前更改c#项目的设置或属性,以便创建一个应运行此c#代码的.bat文件?
我们想要找到两个日期之间的天数.当日期在同一年时,这很简单.
如果日期是在不同的年份,是否有内置的方法可以做到这一点,或者我们是否只需每年循环一次?
我有时需要获取F#中零参数函数的函数本身而不是值,例如用于memoization.即,我有这个:
let memoize (f: 'a -> 'b) =
let dict = new Dictionary<'a, 'b>()
let memoizedFunc (input: 'a) =
match dict.TryGetValue(input) with
| true, x -> x
| false, _ ->
let answer = f input
dict.Add(input, answer)
answer
memoizedFunc
Run Code Online (Sandbox Code Playgroud)
这很好用,但现在我有以下功能:
let private getDataSlowOperation =
// implementation
Run Code Online (Sandbox Code Playgroud)
当我试图记住它时,它会给出类型不匹配(实质上是返回类型getDataSlowOperation和'a类型之间的不匹配).我可以通过更改函数来解决这个问题,如下所示:
let private getDataSlowOperation bogus =
// implementation
Run Code Online (Sandbox Code Playgroud)
现在这个工作,但是必须更改函数签名以使memoization工作似乎很奇怪:
let memoGetDataSlowOperation = memoize getDataSlowOperation
Run Code Online (Sandbox Code Playgroud)
我已经尝试了内联fun声明,但这会创建一个新的匿名函数,并且memoization不能用于此.任何想法如何解决这个问题?我忘了的任何关键字/运营商?
我知道你可以#if DEBUG在C#中使用和喜欢,但是有可能创建一个完全被忽略的方法或类,包括没有包含在#if DEBUG块中的所有用法吗?
就像是:
[DebugOnlyAttribute]
public void PushDebugInfo()
{
// do something
Console.WriteLine("world");
}
Run Code Online (Sandbox Code Playgroud)
然后:
void Main()
{
Console.WriteLine("hello ");
Xxx.PushDebugInfo();
}
Run Code Online (Sandbox Code Playgroud)
其中,如果DEBUG定义将打印"hello world",否则只打印"hello".但更重要的是,MSIL在发布版本中根本不应包含方法调用.
我相信我所遵循的行为类似于Debug.WriteLine,其调用被完全删除,并且对发布版本中的性能或堆栈深度没有影响.
并且,如果可能在C#中,使用此方法的任何.NET语言都会表现相同(即,编译时与运行时优化).
还标记了f#,因为基本上我会在那里需要这个方法.
F#中一个非常方便的功能是你可以进行内联并保持一定级别的值类型多态(虽然我认为"duck-typing"更合适):
// can be used with any argument that implements op_Explicit: ^a -> float
let inline Divide a b = float a / float b
Run Code Online (Sandbox Code Playgroud)
但是当我将它扩展为包含在某个类型中时,F#会推断出第一个参数float,即使我明确要求转换为float.我错过了什么,或者更好的是,我怎样才能op_Explicit恢复这种行为?我尝试添加静态成员约束,但这似乎没有帮助:
type XTest<'T> =
| Value of 'T
| Other of 'T
// a is inferred as float, b as req. op_Explicit
static member inline Divide a b =
match a with
| Value x ->
match b with
| Value y ->
let res = float x / …Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×4
f# ×3
asp.net ×1
batch-file ×1
constraints ×1
datetime ×1
debug-build ×1
f#-3.0 ×1
generics ×1
math ×1
memoization ×1
pre-commit ×1
static ×1
svn ×1
visualsvn ×1