它由Microsoft作为框架设计指南给出,属性应该彼此独立,而不是依赖于按任何特定顺序设置.
假设您有一个需要支持dimmensions和面积计算的三角形类.你会如何模仿这个?
这当然是被认为是gauche的设计,因为Area依赖于Base和Height首先设置:
class Triangle{
public double Base {get;set;}
public double Height {get;set;}
public double Area {
get{
return (Base * Height) / 2;
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设您使用构造函数,您可以确保此情况的默认值,但这是正确的方法吗?
class Triangle{
public Triangle(double b, double h){
Base = b;
Height = h;
}
public double Base {get;set;}
public double Height {get;set;}
public double Area {
get{
return (Base * Height) / 2;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您仍然拥有一个依赖于其他属性的属性.为了成为一个纯粹主义者,我只能看到几种方法(我想它们可以合并):
Make Base/Height具有只能在构造函数中设置的只读成员
将面积计算成方法.
使用某种工厂模式+ readonly成员来确保尽管可能存在依赖关系,但只能通过实例化Triangle类的方法来设置值.
问题:
指南是否切实可行(为了支持它,您是否必须在您的类中建立很多复杂性)?[例如,SqlConnection类允许您初始化连接字符串属性,但允许您更改它的各个部分,例如命令超时]
您如何管理保持您的财产彼此独立?
对于使用Silverlight/MVVM类型体系结构的人来说,由于数据绑定对象的工作方式,您是否接受属性中的依赖项?例如,绑定一个三角形实例,在屏幕上显示高度,基数和面积.
在F#中,类型列表的类型注释是什么(例如int的列表)?通过一个简单的函数,我可以做如下注释:
let square(x:int)= ...
我已将x注释为int类型.但是如果我想为int列表做一个类型注释呢?例如,假设我有一个需要列表的max函数 - 我该如何为它做一个类型注释?
让max(数字:??)= ...
从DATETIME 剥离日期的最佳方法是什么,所以只剩下时间进行比较?
我知道我可以做到以下几点:
CONVERT(DATETIME, CONVERT(VARCHAR(8), GETDATE(),8))
Run Code Online (Sandbox Code Playgroud)
但这涉及转换和字符.如果我想检查时间(包括分钟)是否存储在DATETIME列中的其他两次之间,是否有一种优雅的方法来执行此操作而不必依赖于转换为字符串?
我偶尔会发现自己在C#3.0中寻找模拟元组概念的方法.随着时间的推移,我有各种"穷人"的实现,这里有一些:
基本对象数组:
object[] poorTuple = new object[]{foo,bar,baz}; // basic object array
Run Code Online (Sandbox Code Playgroud)
更强烈的类型,HoHoHo ......
KeyValuePair<TypeA, KeyValuePair<TypeB, TypeC>> poorTuple;
Run Code Online (Sandbox Code Playgroud)
实现一个可以使用类型推断的类(从真实世界的函数编程中解除)
public static class Tuple{
public static Tuple<T1, T2> Create<T1 foo, T2 bar>{
return new Tuple<T1, T2>(foo, bar);
}
}
// later:
var data = Tuple.Create("foo", 42);
Run Code Online (Sandbox Code Playgroud)
问题:
在C#3.0(或缺乏数据结构的选择语言)中使用穷人元组的任何其他方法.
在C#3.0中获取元组的最佳方法是什么- 如果有人有图书馆推荐,欢迎使用.
在什么时候(是的,概括为我)创建一个特定类型而不是列表或元组之类的东西是否有意义?(寻找经验法则)
是否可以在C#中创建匿名委托列表?这是我想写的代码,但它不编译:
Action<int> method;
List<method> operations = new List<method>();
Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,让我近似文本呈现为图像和文本的DHTML编辑器.使用.NET 4 DrawingContext对象的DrawText方法呈现图像.
DrawText方法将文本与字体信息以及尺寸一起使用,并计算使文本尽可能合适所需的包装,如果文本太长则在末尾放置省略号.所以,如果我有以下代码在Rectangle中绘制文本,它将缩写它:
string longText = @"A choice of five engines, although the 2-liter turbo diesel, supposedly good for 48 m.p.g. highway, is not coming to America, at least for now. A 300-horsepower supercharged gasoline engine will likely be the first offered in the United States. All models will use start-stop technology, and fuel consumption will decrease by an average of 19 percent across the A6 lineup. A 245-horsepower A6 hybrid was also unveiled, but no decision has yet …Run Code Online (Sandbox Code Playgroud) 是否有可用于自动从URL创建PDF的PDF库?我使用的当前方法是"打印"页面并选择像PrimoPDF这样的PDF插件来生成PDF文档,但我想要自动化.
我正在尝试编译Android项目失败.错误消息是:
任务':mobile:_compileAppDebug'的执行失败.
java.lang.NoSuchMethodError:com.google.auto.common.MoreTypes.asTypeElements(Ljavax/lang/model/util/Types; Ljava/lang/Iterable;)Lcom/google/common/collect/ImmutableSet;
这是我的模块的gradle依赖项,其中我指定了许多库,包括google Auto:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':library')
compile 'com.google.dagger:dagger:2.0-SNAPSHOT'
provided 'com.google.auto.value:auto-value:1.0-rc1'
apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT'
provided 'org.glassfish:javax.annotation:10.0-b28'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'com.f2prateek.dart:dart:1.1.0'
}
Run Code Online (Sandbox Code Playgroud)
当我查看依赖项时,我认为我只需要谷歌自动值,因为这是丢失方法所在的位置,但添加提供的并不能解决问题.
项目gradle文件包含retrolambda插件
dependencies {
classpath 'me.tatarka:gradle-retrolambda:2.5.0'
classpath 'com.android.tools.build:gradle:1.0.1'
classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
classpath 'io.fabric.tools:gradle:1.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我确定哪些依赖项导致编译错误?有趣的是,当我将gradle文件复制到一个空项目时,一切运行正常.
我正在尝试编写一些可以过滤表单中的数组的Erlang:
[{dakota, "cold and snowy"}, {california, "perfect weather"}] % and so on
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的 - 当我尝试从werl创建.beam时出现语法错误.
-module(matcher).
-export([findkeywords/2]).
findkeywords(Word, Arr) ->
IsMatch = fun({Key, Desc}) ->
lists:any(fun(X) -> X==Word end, string:tokens(Desc, " ")),
lists:filter(IsMatch, [{K, V} || {K, V} <- Arr]).
Run Code Online (Sandbox Code Playgroud)
谁能发现我的语法已关闭?
检查Microsoft SQL Server实例是否已启动的最佳方法是什么?我有一个视图,它跨越两个Microsoft SQL Server实例,但在存储过程中查询它之前,我想验证服务器的第二个实例是否只有查询本地数据的回退选项.
第二个实例是链接服务器.
目前我正在考虑一个SQL CLR函数,它可以尝试以较短的超时打开连接,但我想知道它是否可以直接在Transact SQL中完成.