我是否真的需要使用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);
}
ThirdActivity:
[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";
}
}
根据Selvin,这些构造函数必须保持无参数。我没有相反的信息。但这并不意味着您无法使其更容易使用/创建这些实例。
选项1-工厂方法:
通常,对于构造函数为Private的情况,请使用Factory方法。这样的想法是必须在运行时完成一些工作,您不想与类的普通用户面对。或者您正在使用单例模式。
一个调用公共构造函数然后设置一些公共字段的函数会很奇怪,但是有可能
选项2-初始化程序:
Object Initializers是C#中的东西。现在,了解初始化器与参数化构造器not相同非常重要。这只是语法糖。使用Initializer调用无参数构造函数,然后将值分配给公共变量/字段,就像您在多行上写的一样。
选项3-反向链接:
通常,在链接构造函数时,是从具有least参数的链到具有most的链。每一步都添加一个新的默认值。宏方向远离无参数构造函数。请记住,一旦添加任何构造函数,隐式无参数构造函数将不再存在-您必须使其成为显式的。
假设它不是您要处理的密封类,或者特定情况将其限制为单个构造函数,则可以对其进行子类化并添加许多参数化的构造函数。 Wich都只是通过链接来调用parameterelss基本构造函数,然后分配值。
如果您确实遇到问题的情况之一:特别是对于那些情况,已经发明了扩展方法。