В MySQL 5.7 и Ubuntu 16.04 отредактируйте файл mysql.cnf.
$ sudo nano /etc/mysql/conf.d/mysql.cnf
Включите sql_mode следующим образом и сохраните файл.
[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Обратите внимание, что , в моем случае я удалил режим STRICT_TRANS_TABLES и ONLY_FULL_GROUP_BY.
Сделав это, он сохранит конфигурацию режима навсегда. Иначе, если вы просто обновите @@ sql_mode через MySQL, потому что он перезагрузится при перезагрузке машины / службы.
После этого, чтобы модифицированная конфигурация приняла действие, перезапустите службу mysql:
$ sudo service mysql restart
Попробуйте получить доступ к mysql:
$ mysql -u user_name -p
Если вы можете войти в систему и получить доступ к консоли MySQL, это нормально. Отлично!
НО, если мне нравится, вы сталкиваетесь с ошибкой «неизвестной переменной sql_mode», которая указывает, что sql_mode является опцией для mysqld, вам нужно будет вернуться, отредактировать файл mysql.cnf снова и измените значение [mysql]
на [mysqld]
. Перезапустите службу MySQL и выполните последний тест, пытающийся войти в консоль MySQL. Вот оно!
Мне пришлось изменить ответ Джейкоба Карпентера, но он работает нормально. nobugz также работает, но Jacobs более компактен.
var explicitProperties =
from method in typeof(TempClass).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
where method.IsFinal && method.IsPrivate
select method;
Метод считывания свойства и метод set явно реализованного интерфейсного свойства имеют необычный атрибут. Это - свойство IsFinal, Правда, даже когда это не член запечатанного класса. Попробуйте этот код для проверки моего утверждения:
foreach (AssemblyName name in Assembly.GetEntryAssembly().GetReferencedAssemblies()) {
Assembly asm = Assembly.Load(name);
foreach (Type t in asm.GetTypes()) {
if (t.IsAbstract) continue;
foreach (MethodInfo mi in t.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)) {
int dot = mi.Name.LastIndexOf('.');
string s = mi.Name.Substring(dot + 1);
if (!s.StartsWith("get_") && !s.StartsWith("set_")) continue;
if (mi.IsFinal)
Console.WriteLine(mi.Name);
}
}
}
Вот измененное решение на основе реализации, данной в это сообщение в блоге :
var explicitProperties =
from prop in typeof(TempClass).GetProperties(
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly)
let getAccessor = prop.GetGetMethod(true)
where getAccessor.IsFinal && getAccessor.IsPrivate
select prop;
foreach (var p in explicitProperties)
Console.WriteLine(p.Name);
Это чрезмерно сложно. Необходимо отразиться по методам/свойствам Интерфейсного типа, видеть, существуют ли они в типе класса и сравнивают их, чтобы видеть, являются ли они "тем же", когда они действительно существуют.
, Если что-то находится в интерфейсе, но не типе, Вы тестируете, это - явная реализация. Если это находится в обоих, но отличающийся между этими двумя, это - явный интерфейс.
Код Jacob пропускает фильтр:
var props = typeof(TempClass).GetInterfaces().Where(i => i.Name=="TempInterface").SelectMany(i => i.GetProperties());
foreach (var prop in props)
Console.WriteLine(prop);
Я думаю, что вам нужен класс System.Reflection.InterfaceMapping.
Type ifaceType = typeof(TempInterface);
Type tempType = typeof(TempClass);
InterfaceMapping map = tempType.GetInterfaceMap(ifaceType);
for (int i = 0; i < map.InterfaceMethods.Length; i++)
{
MethodInfo ifaceMethod = map.InterfaceMethods[i];
MethodInfo targetMethod = map.TargetMethods[i];
Debug.WriteLine(String.Format("{0} maps to {1}", ifaceMethod, targetMethod));
}