我真的需要使用Intent
来致电活动表格,如下所示吗?如您所见,我还传递了诸如Dog
之类的某些对象,并在OnCreate
方法内接受了第三次活动。我的问题是,就像我可以在第三个活动中创建构造函数并在其中传递一些参数,而不是使用Intent
和bundle
传递值一样,或者就像必须这样做一样方式吗?
我将第三项活动称为其他活动:
private void OpenOtherActivityWindow_Click(object sender, EventArgs e)
{
Intent nextActivity = new Intent(this, typeof(ThirdActivity));
Dog mydog = new Dog("mydogName");
Bundle bundle = new Bundle();
bundle.PutSerializable("mydoggy", mydog);
nextActivity.PutExtra("RowID", Convert.ToString(10));
nextActivity.PutExtras(bundle);
StartActivity(nextActivity);
}
第三活动:
[Activity(Label = "ThirdActivity")]
public class ThirdActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your application here
SetContentView(Resource.Layout.third);
//Receive values if any from previous activity
if (!Intent.HasExtra("mydoggy")) return;
Dog tryme = (Dog)Intent.GetSerializableExtra("mydoggy");
if (!Intent.HasExtra("RowID")) return;
string text = Intent.GetStringExtra("RowID") ?? "0";
}
}
答案 0 :(得分:-2)
根据Selvin,这些构造函数必须保持无参数。我没有相反的信息。但这并不意味着您不能使其更容易使用/创建这些实例。
选项1-工厂方法:
通常,在构造函数为Private的情况下,请使用Factory方法。这样的想法是必须在运行时完成一些工作,您不想与类的普通用户面对。或者您正在使用单例模式。
调用公共构造函数然后设置一些公共字段的函数可能很奇怪,但有可能
选项2-初始化程序:
Object Initializers是C#中的东西。现在,了解初始化器与参数化构造器不相同是非常重要的。这只是语法糖。使用Initializer调用无参数构造函数,然后将值分配给公共变量/字段,就像您在多行代码中写的一样。
选项3-反向链接:
通常,在链接构造函数时,您将链接从具有 least 参数的一个到具有 most 的一个。每一步都添加一个新的默认值。 Nromal方向远离无参数构造函数。请记住,一旦添加任何构造函数,隐式无参数构造函数将不再存在-您必须使其成为显式的。
假设它不是您要处理的密封类,或者特定情况将其限制为单个构造函数,则可以对其进行子类化并添加许多参数化的构造函数。 Wich都只是通过链接来调用parameterelss基本构造函数,然后分配值。
如果您确实遇到了一种有问题的情况:特别是对于这些情况,已经发明了扩展方法。