简而言之,我只是想知道,是否(以及如何)我可以做Me = object
这样的事情?
(在C#中:This = object
)
给定的对象是同一个类,只是另一个实例。 我在谷歌和论坛搜索中找不到任何关于它的信息。
这不是一个真正的问题,但困扰我。 基本上我想摆脱下面的init()函数(类似VB.net的伪代码)。
class foo
' init() is called by all constructors '
private sub init(bar1, bar2)
#do quite some stuff, initialize members, ...
end sub
' heavy constructor overloading '
public sub new(...)
public sub new(...)
' a constructor that is supposed to parse a string '
public sub new(String)
#do parsing, then call init() with the extracted information
end sub
' a parser '
public shared function Parse (String) as foo
#do parsing and return new foo
end function
end class
现在我的实际“问题”。有不同的方法来解决这个问题:
1)我可以在字符串构造函数中调用.parse-function。
- > string-constructor将创建对象foo1
- >然后它将调用解析器,它将从字符串中提取信息,然后创建一个新对象foo2(通过使用提取的信息调用正确的构造函数)
- > foo2正是我想要的foo1,所以调用Me = foo2
可以解决我的问题。但我不知道有什么方法可以做到这一点,或者只是将foo2“返回”给构造函数的调用者。
相反,我必须调用init(foo2.information)
然后设置foo1.information = foo2.information
所以简而言之,我的构造函数通过Parse()创建foo1,然后创建foo2,然后通过init()将foo2复制到foo1 - >低效
2)我可以在.parse-function中调用string-constructor。 - > string-constructor首先必须从字符串中提取所有信息 - >然后它可以使用该信息调用我的默认构造函数...等待否......它不能。这是因为在构造函数中,我只能在第一行代码中调用其他构造函数。因此我必须创建一个名为init()的辅助子,它取代了我常用的构造函数。 helper-sub使这个解决方案成为一个很好的工作解决方案,但我不知道为一个单独的案例提供了额外的sub ...
所以这绝对没什么大不了的,但这让我很烦恼。 还有另一种解决方法吗?
提前感谢分配, 贾尼斯
PS:拥有Parse(string)和new(string)意味着提高类的可用性
答案 0 :(得分:4)
语法:
this = something
仅允许struct
类型,而不是类。
因此,答案是否定的,这是不可能的(因为你指的是对象)。
答案 1 :(得分:2)
问题的答案是:你不能这样做。
解决潜在问题的方法如下。
让您的Parse
变为私有,并返回您的基础构造函数(或init()
)可以接受的内容。然后在一行上调用Parse
,您可以调用另一个构造函数。我将在下面使用C#,但想法是一样的:
public class MyClass {
private MyClass(ResultsOfParse data) {
...
}
public MyClass(string data) : this(Parse(data)) {
// nothing to do, the other constructor did all the work
}
private static ResultsOfParse Parse(string data) {
// parse the string
// put all necessary data into ResultsOfParse and return it
}
private class ResultsOfParse {
// contains everything the constructor of MyClass needs
}
}