Всем привет, я сам пришёл к решению. Выкладываю решение своего же вопроса, вдруг кому пригодится.
using System;
using System.Reflection;
using System.Linq;
namespace _123
{
[AttributeUsage((AttributeTargets.Method))] //атрибут на метод
public class HiddenMethod : System.Attribute
{
}
[AttributeUsage((AttributeTargets.Property))] //атрибут на свойство
public class HiddenProperty : System.Attribute
{
}//Вообще атрибуты сверху можно заменить одним,
//просто в качестве параметра AttributeUsage прописать
//(AttributeTargets.Method || AttributeTargets.Property)
public class ReflectClass //перечисление методов и свойств
{
double d, f;
[HiddenProperty]
public string DefaultMessage { get; set; } = "Hello world"; //Свойства
public string SecondMessage { get; set; } = "Hi";
public string ThirdMessage { get; set; } = "Bye";
public ReflectClass(double d, double f) //к конструктору нельзя применять атрибуты
{
this.d = d;
this.f = f;
}
public double MyTest(double d, double f) //Методы
{
return d + f;
}
[HiddenMethod]
public void Set1(double d, double f)
{
}
public void Set2(double d, double f)
{
}
public void Set3(double d, double f)
{
}
public static void MethodReflectInfo<T>(T obj) where T : class //основной класс
{
Type t = typeof(T);//Определение типа
Console.WriteLine("Список методов класса {0}\n", obj.ToString());
var meths = t.GetMethods().Where(p => !p.GetCustomAttributes<HiddenMethod>().Any() && !p.Name.Contains("get_") && !p.Name.Contains("set_")).ToList();
foreach (MethodInfo m in meths) //поиск методов
{
//if ((!(m.GetCustomAttribute<HiddenMethod>() == null)) && (!(m.Name.Contains("_get"))) && (!(m.Name.Contains("_set"))))//проверка
//{
Console.Write("-->" + m.ReturnType.Name + " \t" + m.Name + "(");
ParameterInfo[] p = m.GetParameters();
for (int i = 0; i < p.Length; i++)
{
Console.Write(p[i].ParameterType.Name + " " + p[i].Name);
if (i + 1 < p.Length)
{
Console.Write(", ");
}
}
Console.Write(")\n");
//}
}
Console.WriteLine("Список свойств класса {0}\n", obj.ToString());
var props = t.GetProperties().Where(p => !p.GetCustomAttributes<HiddenProperty>().Any()).ToList();
foreach (PropertyInfo m in props) //поиск свойств
{
//if (((m.GetCustomAttribute<HiddenProperty>() != null)) || (m.Name.Contains("_get") || (m.Name.Contains("_set"))))//проверка
//{
Console.Write("-->" + " \t" + m.Name + " \t" + " Can read:" + m.CanRead + " \t" + " Can write:" + m.CanWrite);
Console.Write("\n");
//}
}
}
}
class Program
{
static void Main(string[] args)
{
ReflectClass mts = new ReflectClass(12.0, 3.5);
ReflectClass.MethodReflectInfo<ReflectClass>(mts);
Console.ReadLine();
}
}
}