C # Activator.CreateInstance из папки - подзаголовок [дубликат]

Определенно это не так, но я нашел эту ошибку довольно распространенной и неочевидной. Целью FOREIGN KEY может быть не PRIMARY KEY. Ответ, который мне пригодится, - это:

ИНОСТРАННЫЙ КЛЮЧ всегда нужно указывать на истинное поле PRIMARY KEY другой таблицы.

CREATE TABLE users(
   id INT AUTO_INCREMENT PRIMARY KEY,
   username VARCHAR(40));

CREATE TABLE userroles(
   id INT AUTO_INCREMENT PRIMARY KEY,
   user_id INT NOT NULL,
   FOREIGN KEY(user_id) REFERENCES users(id));
19
задан Display Name 16 March 2013 в 20:32
поделиться

4 ответа

Наличие имени класса в строке недостаточно, чтобы создать свой экземпляр. На самом деле вам понадобится полное пространство имен, включая имя класса, для создания объекта.

Предполагая, что у вас есть следующее:

string className = "MyClass";
string namespaceName = "MyNamespace.MyInternalNamespace";

Чем вы можете создать экземпляр этого class, объект класса MyNamespace.MyInternalNamespace.MyClass, используя любой из следующих методов:

var myObj = Activator.CreateInstance(namespaceName, className);

или это:

var myObj = Activator.CreateInstance(Type.GetType(namespaceName + "." + className));

Надеюсь, что это поможет, пожалуйста, дайте мне знать, если нет.

39
ответ дан Display Name 25 August 2018 в 13:45
поделиться

Класс Activator выполняет это задание в .net, и этот метод очень полезен для сценариев зависимостей инъекций.

string NameSpace = "ProjectName.YourNameSpace";
string ProbeClass = "CLassName";

ObjectHandle ProberHandle = Activator.CreateInstance(NameSpace, ProbeClass) as ObjectHandle;
ClassName Prober = ProberHandle.Unwrap() as ClassName;

Убедитесь, что вы развернете перед типом каста, иначе он даст ошибку преобразования.

0
ответ дан amarnath chatterjee 25 August 2018 в 13:45
поделиться
    string frmName = "frmCustomer";
    //WorldCarUI. is the namespace of the form
    Type CAType = Type.GetType("WorldCarUI." + frmName );
    var myObj = Activator.CreateInstance(CAType);
    Form nextForm2 = (Form)myObj;
    nextForm2.Show();

это работает.

С уважением, Avi

8
ответ дан Avinash 25 August 2018 в 13:45
поделиться

самый простой способ - использовать Activator. Введите имя класса в GetType и создайте новый экземпляр.

ClassInstance s1 = (ClassInstance)Activator.CreateInstance(Type.GetType("App.ClassInstance"));

public class ClassInstance
{
    public string StringData { get; set; }
}

С уважением, Nik

2
ответ дан Nik 25 August 2018 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: