两者之间有什么区别?何时使用"对象初始值设定项"而不是"构造函数",反之亦然?我正在使用C#,如果这很重要的话.另外,对象初始化方法是否特定于C#或.NET?
为什么构造函数不支持类型推断,就像通用方法一样?
public class MyType<T>
{
private readonly T field;
public MyType(T value) { field = value; }
}
var obj = new MyType(42); // why can't type inference work out that I want a MyType<int>?
Run Code Online (Sandbox Code Playgroud)
虽然你可以用工厂类解决这个问题,
public class MyTypeFactory
{
public static MyType<T> Create<T>(T value)
{
return new MyType<T>(value);
}
}
var myObj = MyTypeFactory.Create(42);
Run Code Online (Sandbox Code Playgroud)
构造函数不支持类型推断是否存在实际或哲学原因?
简介:我想在构造函数中调用异步方法.这可能吗?
详细信息:我有一个调用getwritings()JSON数据的方法.如果我只是调用getwritings()一个async方法并将其放在await左侧,那么一切正常.但是,当我LongListView在我的页面中创建一个并尝试填充它时,我发现这getWritings()是令人惊讶的返回null而且LongListView是空的.
为了解决这个问题,我尝试更改getWritings()to 的返回类型,Task<List<Writing>>然后在构造函数中检索结果getWritings().Result.但是,这样做最终会阻止UI线程.
public partial class Page2 : PhoneApplicationPage
{
List<Writing> writings;
public Page2()
{
InitializeComponent();
getWritings();
}
private async void getWritings()
{
string jsonData = await JsonDataManager.GetJsonAsync("1");
JObject obj = JObject.Parse(jsonData);
JArray array = (JArray)obj["posts"];
for (int i = 0; i < array.Count; i++)
{
Writing writing = new Writing();
writing.content = JsonDataManager.JsonParse(array, …Run Code Online (Sandbox Code Playgroud) c# constructor async-await windows-phone-8 visual-studio-2013
在C#中,您可以对通用方法设置约束,例如:
public class A {
public static void Method<T> (T a) where T : new() {
//...do something...
}
}
Run Code Online (Sandbox Code Playgroud)
您指定的T应该具有不需要参数的构造函数.我想知道是否有办法添加一个约束,如" 存在一个带float[,]参数的构造函数? "
以下代码无法编译:
public class A {
public static void Method<T> (T a) where T : new(float[,] u) {
//...do something...
}
}
Run Code Online (Sandbox Code Playgroud)
解决方法也有用吗?
我有一个结构,我希望它用一些合理的默认值初始化.
通常,这里要做的是使用构造函数,但由于go不是传统意义上的OOP,因此它们不是真正的对象,也没有构造函数.
我注意到了init方法,但是在包级别.是否有类似的东西可以在结构级别使用?
如果不是在Go中这种类型的东西被接受的最佳实践是什么?
使构造函数抛出异常是一个好习惯吗?例如,我有一个类Person,我有age它的唯一属性.现在我提供课程为
class Person{
int age;
Person(int age) throws Exception{
if (age<0)
throw new Exception("invalid age");
this.age = age;
}
public void setAge(int age) throws Exception{
if (age<0)
throw new Exception("invalid age");
this.age = age;
}
}
Run Code Online (Sandbox Code Playgroud) 如果不将它放在子类的构造函数中,编译器是否会自动放置这个?
那意味着我甚至不需要关心它?在一些文章中,他们把它说出来.
如果我有一个带参数的构造函数,这将是构造函数,还是它需要一个没有参数列表的构造函数?
在Visual Studio中创建构造函数的代码段或快捷方式是什么?
Visual Studio 2010和C#.
我以前用过它,但我记不起来了.
我正在尝试为博客平台创建一个构造函数,它内部有许多异步操作.这些包括从目录中获取帖子,解析它们,通过模板引擎发送它们等等.
所以我的问题是,让我的构造函数返回一个promise而不是它们调用的函数的对象是不明智的new.
例如:
var engine = new Engine({path: '/path/to/posts'}).then(function (eng) {
// allow user to interact with the newly created engine object inside 'then'
engine.showPostsOnOnePage();
});
Run Code Online (Sandbox Code Playgroud)
现在,用户可能还没有提供补充Promise链链接:
var engine = new Engine({path: '/path/to/posts'});
// ERROR
// engine will not be available as an Engine object here
Run Code Online (Sandbox Code Playgroud)
这可能会造成问题,因为用户可能会感到困惑,为什么 engine 在施工后无法使用.
在构造函数中使用Promise的原因是有道理的.我希望整个博客在构建阶段后正常运行.然而,在呼叫之后,它似乎几乎无法立即访问该对象new.
我一直在争论使用的东西,engine.start().then()或者engine.init()会返回Promise.但那些看起来也很臭.
编辑:这是在Node.js项目中.
究竟什么是默认构造函数 - 你能告诉我以下哪一个是默认构造函数,以及它与其他构造函数的区别是什么?
public Module() {
this.name = "";
this.credits = 0;
this.hours = 0;
}
public Module(String name, int credits, int hours) {
this.name = name;
this.credits = credits;
this.hours = hours;
}
Run Code Online (Sandbox Code Playgroud) constructor ×10
c# ×5
java ×3
generics ×2
.net ×1
architecture ×1
async-await ×1
exception ×1
go ×1
javascript ×1
node.js ×1
oop ×1
parameters ×1
promise ×1
shortcut ×1
super ×1