Tag: 实例化

如果.Create()无法实例化,它应该返回空对象,null还是抛出exception?

我希望能够使用这种代码实例化我的应用程序中的任何对象: SmartForm smartForm = SmartForm.Create(“id = 23”); Customer customer = Customer.Create(“id = 222”); 我现在正在讨论如果该对象不存在,Create()应该返回什么。 如果Create()返回一个空对象 ,那么这是一种“空模式”,我仍然可以在我的应用程序周围传递该对象并在其上调用方法,这使得使用此模型进行编程变得方便和容易 如果Create()返回null ,那么我需要在每次实例化后检查对象是否等于null,这使得编程更乏味但更明确。 这样做的一个问题是,如果你忘记检查null,你的应用程序可能会工作很长时间而你不知道你没有检查null,然后突然中断 如果Create() 抛出exception ,它基本上与返回null相同,但是通过让你为每个实例化创建一个try,next,finally块,使编程更加繁琐,但你可以抛出各种类型的exception(你可以’ t使用null解决方案)可能会冒泡,以便您可以更明确地处理UI上的深层错误,所以我认为这是最强大的解决方案,尽管会产生try / catch代码膨胀 所以它似乎是轻盈/稳健性的折衷 。 有没有人有任何经验可以根据这个决定在这些方面做出决定? using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestFactory234.Models { public class SmartForm : Item { public string IdCode { get; set; } public string Title […]

如何将包含某些属性的custom-class类型的未知对象列表传递给方法?

我正在创建一个databasehelper类,其中包含访问SQLCE数据库的方法。 我想使用相同的方法使用包含与不同表中的字段匹配的属性的不同类来读取行。 要使用的类是在运行时确定的,我想将包含类中对象的列表传递给方法,并获取属性名并使用它们来读取数据库。 会非常方便,因为我可以将它用于我的所有(SQLCE-)数据库。 (我更新了错误的代码以便在这里提供解决方案) #region ReadData ///———————————————————————- /// /// Reads datarows from database and adds them to list. /// /// List containing objects with properties. /// Table in database. /// Substring of SQL-statement that follows ‘WHERE’. /// Connectionstring. /// true if successfull ///———————————————————————- public static bool ReadData(List data, string table, string search, string connect) […]

创建参数类型的对象

嘿。 是否有可能有一个方法允许用户传入某种类型的参数并让该方法实例化该类型的新对象? 我想做这样的事情:(我不知道仿制药是否可行,但试了一下) public void LoadData(T, string id, string value) where T : new() { this.Item.Add(new T() { ID=id, Val = value}); } 上述方法不起作用,但想法是用户传递他们想要实例化的对象类型,并且该方法将根据这些参数填写详细信息。 我可以传递一个Enum参数并执行一个Switch并根据它创建新对象,但是有更好的方法吗? 谢谢

Activator.CreateInstance()麻烦

我有一个工厂应该创建在运行时从类Fooinheritance的对象。 我认为System.Activator.CreateInstance的返回类型与它创建的对象的类型相同,但从以下错误消息判断,其返回类型是Object。 错误1无法将类型’object’隐式转换为’cs_sandbox.Foo’。 存在显式转换(您是否缺少演员?)F:\ projects \ cs_sandbox \ Form1.cs 46 24 cs_sandbox 好吧,也许我错过了一个演员,但是 return (t)System.Activator.CreateInstance(t); 导致另一条错误消息 – 我必须承认 – 这对我没有意义: 错误1找不到类型或命名空间名称’t’(您是否缺少using指令或程序集引用?)F:\ projects \ cs_sandbox \ Form1.cs 45 25 cs_sandbox 这是我的代码: class Foo { } class FooChild1 : Foo { } class FooChild2 : Foo { } class MyFactory { public static Foo CreateInstance(string s) { […]

Visual Studio WinForms设计器不实例化对象

我创建了一个派生自System.Windows.Forms.ContextMenuStrip类的类,而不是用户控件,只是一个带有构造函数和一个事件处理程序的普通.cs类。 当我将这个类从工具箱拖到设计器上时,它会为它创建一个私有成员和几个属性,但不会实例化一个对象。 因此,在运行时我得到“对象引用未设置为对象的实例。”,因为设计者从不生成该行: this.searchGridContextMenu1 = new SearchGridContextMenu(); 在InitializeComponent中。 它曾用于生成这一行,事实上,我一直把它从我的Vault存储库中重新插入,但设计师只是“再次”使用它。 更新:我现在尝试使用相同的类创建用户控件,它只是这样做有同样的问题。

通用方法:使用参数实例化generics类型

我有一个generics方法,它接受一个类型T,我需要能够调用一个构造函数,需要一个XmlNode。 目前,我试图通过一个具有我想要的构造函数的抽象基类来做到这一点(加上一个无参数的基类,所以我不必编辑“子类”而不是添加实际的子类)并通过它来约束。 如果我尝试实例化其中一个类,它会抱怨它: Cannot create an instance of the variable type ‘T’ because it does not have the new() constraint 如果我添加new()约束,我得到: ‘T’: cannot provide arguments when creating an instance of a variable type 我怎么能做我想要的?

如何在C#中一般实例化generics类?

也许这很简单,但我没有使用类型Type和它的用途。 假设我想用T = Double或T = UInt32创建List ,具体取决于某些函数的结果,比如public static Type CheckType(String input); 在代码中: Type t = Program.CheckType(someInput); // it returns typeof(Double) or typeof(UInt32) if (t == typeof(Double)) List l = new List(); else List l = new List(); 我知道上面的代码不会编译,因为我让l有两个不同的含义(一个double列表和一个unsigned int列表)……所以它引出了我的问题 : 有没有办法在上面的代码中避免使用if ? 与此类似的东西: Type t = Program.CheckType(someInput); List l = new List(); // I know […]

C ++与C#中的静态变量有什么区别?

静态变量在C#中具有与在C ++中相同或相似的function吗? 编辑: 使用C ++,您可以在许多不同的上下文中使用静态变量 – 例如:1)全局变量,2)本地函数变量,3)类成员 – C#中的类似用法是否与C ++类似?

从父对象创建子对象实例的最佳方法

我正在从父对象创建一个子对象。 所以场景是我有一个对象和一个子对象,它为我想要搜索的场景添加了一个距离属性。 我选择使用inheritance,因为我的UI与搜索对象或对象列表等效地工作,而不是位置搜索的结果。 所以在这种情况下,inheritance似乎是一个明智的选择。 目前我需要从MyObjectSearch的一个实例生成一个新对象MyObject 。 目前我通过逐个设置属性手动在构造函数中执行此操作。 我可以使用reflection,但这会很慢。 有没有更好的方法来实现这种对象增强? 希望下面的代码说明了这个场景。 public class MyObject { // Some properties and a location. } public class MyObjectSearch : MyObject { public double Distance { get; set; } public MyObjectSearch(MyObject obj) { base.Prop1 = obj.Prop1; base.Prop2 = obj.Prop2; } } 我的搜索function: public List DoSearch(Location loc) { var myObjectSearchList = […]

Unity 2D C#在canvas上实例化精灵。 找不到什么问题

我读了很多关于这个的问题,但我仍然无法找到我的问题…我正试图在canvas上实例化一个预制件。 它由一个按钮和一个精灵组成。 按钮看起来没问题,但精灵在游戏中不可见(但在场景中可见)。 我做错了什么,但我看不出是什么…… [SerializeField] GameObject finishedLevel; private void Start() { finishedLevel = Instantiate(finishedLevel, transform.position, transform.rotation); finishedLevel.transform.SetParent(GameObject.FindGameObjectWithTag(“Canvas”).transform, false); }