Если в вашей папке несколько файлов SQL, и вы установили Git Bash , вы можете использовать эту команду для импорта нескольких файлов:
cd /my-project/data
cat *.sql | /c/xampp/mysql/bin/mysql -u root -p 1234 myProjectDbName
Когда запускается конструктор? Попробуйте это с примером:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Creating MyClass instance");
MyClass mc = new MyClass();
Console.WriteLine("Setting value in MyClass instance");
mc.Value = 1;
Console.WriteLine("Getting attributes for MyClass type");
object[] attributes = typeof(MyClass).GetCustomAttributes(true);
}
}
[AttributeUsage(AttributeTargets.All)]
public class MyAttribute : Attribute
{
public MyAttribute()
{
Console.WriteLine("Running constructor");
}
}
[MyAttribute]
class MyClass
{
public int Value { get; set; }
}
А что будет на выходе?
Creating MyClass instance
Setting value in MyClass instance
Getting attributes for MyClass type
Running constructor
Итак, конструктор атрибута запускается, когда мы начинаем исследовать атрибут. Обратите внимание, что атрибут извлекается из типа, а не из экземпляра типа.
Метаданные в исполняемых файлах или хранилищах DLL:
Когда я добираюсь до этого раздела В моей реализации CLI я планирую лениво вызывать конструктор при первом вызове GetCustomAttributes ()
для ICustomAttributeProvider
. Если запрашивается конкретный тип атрибута, я построю только те, которые необходимы для возврата этого типа.
Установите точку останова отладчика внутри конструктора атрибутов и напишите некоторый код отражения, который считывает эти атрибуты. Вы заметите, что объекты атрибутов не будут созданы, пока они не будут возвращены из API-интерфейса relfection. Атрибуты для каждого класса . Они являются частью метаданных.
Взгляните на это:
using System;
using System.Linq;
[My(15)]
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Program started");
var ats =
from a in typeof(Program).GetCustomAttributes(typeof(MyAttribute), true)
let a2 = a as MyAttribute
where a2 != null
select a2;
foreach(var a in ats)
Console.WriteLine(a.Value);
Console.WriteLine("Program ended");
Console.ReadLine();
}
}
using System;
[AttributeUsage(validOn : AttributeTargets.Class)]
public class MyAttribute : Attribute
{
public MyAttribute(int x)
{
Console.WriteLine("MyAttribute created with {0}.", x);
Value = x;
}
public int Value { get; private set; }
}
Program started
MyAttribute created with 15.
15
Program ended
Но не беспокойтесь о производительности конструкторов атрибутов.