我很确定我正在复制一个问题,但在我的例子中它不起作用,请看代码:
Dropzone.options.newTicket =
clickable:'#previews'
previewsContainer: "#previews"
dictDefaultMessage: "Drop files here or click to select files"
autoProcessQueue: false
uploadMultiple: true
paramName1: "ticket[attachments_attributes]"
paramName2: "[file]"
parallelUploads: 5
maxFiles: 5
addRemoveLinks: true
此构造函数class Program
{
static void Main(string[] args)
{
Test test1 = new Test("str", "strrr");
}
}
class Test
{
public string testValue, mType;
public Test(string value, string messageType)
{
this.testValue = value;
this.mType = messageType;
}
public Test (string value) : this (value, messageType)
{
//want to manipulate value and messageType here
}
}
中的 messageType表示它在当前上下文中不存在。我想以这种方式调用它,因为首先我希望我的代码用两个字符串实例化类,然后我想只为一个参数构造函数提供值但不丢失public Test (string value) : this (value, messageType)
,因为我将在其中使用它这个构造函数messageType
。我读到了链接和实例化构造函数,但似乎这与我读到的相反。对不起,如果这是一个简单的问题,我还没有很多练习,我想知道代码的外观。在我指出这个问题之前我已经阅读过:Call one constructor from another,How call constructor inside other constructor?,http://www.csharp411.com/constructor-chaining/,它对我不起作用,如果我复制或做傻事,我会再次感到抱歉。
答案 0 :(得分:0)
因此,在您的示例中,您必须构造函数:一个接受值和类型,另一个接受唯一值。在这种情况下,如果用户仅提供值,则类型应具有默认的假定值。例如,您可以执行以下操作:
public Test (string value) : this (value, "Default Message Type")
{
}
这段代码的作用是它从用户获取值,即构造函数的调用者,并将其传递给另一个构造函数,以及一个名为“Default Message Type”的默认消息。
请注意,您不需要在此构造函数中放置任何代码,因为它将调用另一个将设置值和类型的构造函数。
希望这有帮助。
编辑:从评论中我理解@ArnosGo想要对值进行一些操作并添加一些找到messageType值的逻辑,然后将两者都传递给另一个构造函数。不幸的是,在调用其他构造函数之前不可能对数据进行一些操作,但这是一个诀窍:
class Test
{
public string testValue, mType;
public Test(string value, string messageType)
{
Initialise(value, messageType);
}
public Test (string value)
{
// Do some manipulation here and found out the value of messageType.
Initialise(value, messageType);
}
protected void Initialise(string value, string messageType)
{
this.testValue = value;
this.mType = messageType;
}
}
基本上,您正在创建一个执行两个构造函数的函数,然后构造函数只计算值并将它们传递给该函数。
答案 1 :(得分:0)
在创建数据库之前调用数据库和消息字符串 Test类的对象,然后我想在其中放入两个值,然后 在里面操纵这些值并将它们提供给构造函数 一个参数。如果这解释了什么。
根据OP的评论,我认为使用静态方法的方法会更好 因为值只被操作一次而属性只被赋值一次。
public class Test
{
private static ManipulateValues(string value, string msgtype)
{
//Do your manipulating
Return manipulatedValue;
}
public static Create(string value, string msgtype)
{
return new Test(Test.ManipulateValues(value, msgtype), msgtype);
}
public Test(string value, string msgType)
{
this.testValue = value;
this.mType = messageType;
}
}
然后使用它:
string messageType = someValue;
string value = someDatabaseValue;
Test temp = Test.Create(value, messageType)
答案 2 :(得分:0)
我认为您要做的是调用Test test1 = new Test("Value", "MessageType");
来实例化一个对象。然后,带有两个字符串的构造函数会将这些参数设置为testValue
和mType
字段,并调用第一个构造函数进行操作。
在你的代码中,第一个构造函数不调用第二个构造函数,实际上第二个构造函数调用第一个构造函数。如果你想让第一个构造函数调用第二个构造函数,那么你的构造函数签名应该是这样的:
public Test(string value, string messageType) : this(value)
public Test(string value)
但是在这里你不能将messageType
参数发送给第二个构造函数。因此,您应该编写一个初始化方法,将第二个构造函数的内容放在此方法中,并从两个构造函数中调用它,并且不要使用构造函数链接。
public Test(string value, string messageType)
{
this.testValue = value;
this.mType = messageType;
Initialize();
}
public Test(string value)
{
this.testValue = value;
Initialize()
}
public void Initialize()
{
//This is the code in the second constructor
}