Giả sử đoạn mã này:Nhận chỉ các thành viên lớp hiện qua Reflection
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
namespace TestFunctionality
{
class Program
{
static void Main(string[] args)
{
// System.Reflection.Assembly.GetExecutingAssembly().Location
Assembly assembly = Assembly.LoadFrom("c:\\testclass.dll");
AppDomain.CurrentDomain.Load(assembly.GetName());
var alltypes = assembly.GetTypes();
foreach (var t in alltypes)
{
Console.WriteLine(t.Name);
var methods = t.GetMethods(/*BindingFlags.DeclaredOnly*/);
foreach (var method in methods)
Console.WriteLine(
"\t--> "
+(method.IsPublic? "public ":"")
+ (method.IsPrivate ? "private" : "")
+ (method.IsStatic ? "static " : "")
+ method.ReturnType + " " + method.Name);
}
Console.ReadKey();
}
}
}
tôi đang cố gắng để có được những định nghĩa của phương pháp được định nghĩa trong lớp này nhưng không từ lớp cơ sở. tức là, tôi không muốn nhận những thứ như
System.String ToString() // A method in the base class object.
Làm cách nào để lọc chúng?
Tôi đã cố gắng vượt qua BindingFlags.DeclaredOnly
nhưng lọc mọi thứ. Đây là bên trong testclass.dll:
namespace TestClass
{
public class Class1
{
public static int StaticMember(int a) { return a; }
private void privateMember() { }
private static void privateStaticMember() { }
public void PublicMember() { }
public void PublicMember2(int a) { }
public int PublicMember(int a) { return a; }
}
}
gì bạn đề nghị?
Cảm ơn bạn.
1 Lưu ý: Đối với các thành viên tin đây là hành vi mặc định. Bạn sẽ chỉ nhận được các thành viên được khai báo. –
@SriramSakthivel, chờ đã, sẽ không 'NonPublic' cũng lấy các thành viên' protected'? Những người đó sẽ được thừa hưởng. –
Tôi phải thừa nhận rằng tôi đã xem xét việc giữ lại +1 của mình để sử dụng cụm từ "Các tùy chọn là khá vô hạn". Tôi chắc chắn rằng không có nhiều hơn một triệu tùy chọn ... ;-) – Chris