我可以使用System.Reflection在另一个独立的aspx页面中加载一个独立的aspx页面吗?
我正在使用ASP.NET 2.0网站项目模型.
我正在使用反射来组装我正在使用的公共API,System.CodeDOM以生成一些将通过API提取信息的代码.
在我自动生成的代码的一部分中,我引用了API程序集中许多类型属性的值.但是,我最后会继续引用我生成的代码中不存在的属性.Type.GetProperties()根据我的理解,我使用的只能归还公共财产.
我进一步调查了一下,发现当我有一个丢失的属性时,称之为调用类中SampleProperty有两个方法get_SampleProperty,set_SampleProperty但没有实际SampleProperty属性.
这里发生了什么?为什么intellisense将这些方法视为单独的方法,但是当通过反射返回时它们会显示为属性?
我正在尝试枚举程序集中的所有方法并将它们添加到树视图中的节点:
private void bOpen_Click(object sender, EventArgs e)
{
var ofd = new OpenFileDialog();
if (ofd.ShowDialog() != DialogResult.OK)
return;
var asm = Assembly.LoadFile(ofd.FileName);
foreach (Module module in asm.GetModules())
{
var tnode = new TreeNode(module.Name);
foreach (MethodInfo method in module.GetMethods())
{
tnode.Nodes.Add(method.Name);
}
treeView1.Nodes.Add(tnode);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是任何模块都没有方法.我知道它与treeview无关,因为module.GetMethods().长度返回0.有什么我缺少的吗?
该类将被声明runtime并values存储在Bag像session或的对象中ViewBag.现在我想创建一个类的实例,并使用Bag数据设置它的属性 .我知道我应该使用reflection,但我不知道是否有任何开箱即用的方法或者我应该创建一个?
session["Foo"] = "foo";
session["Bar"] = "bar";
var instance = System.Activator.CreateInstance(Type.GetType(className));
instance = ? // how to set properties using session
Run Code Online (Sandbox Code Playgroud)
该类在设计时间不可用,应用程序不知道它的属性是什么.
如果这已在其他地方得到解答,请道歉,但我并不过分熟悉Reflection,所以我不确定我应该搜索的确切术语.
基本上我正在尝试根据类型查找类的已定义公共静态字段列表.
所以给定了LocalisationToken类,我有很多基于此的类,例如AboutToken,AdminToken等.
这些类中的每一个都具有这些派生类的公共静态只读实例,例如:
public static readonly LocalisationToken TermsAndConditions = new AboutToken("Terms And Conditions", Guid.Parse("595FB313-4940-489b-9CC8-4B9BF0B62E8B"));
public static readonly LocalisationToken OkGotIt = new AboutToken("OK, got it", Guid.Parse("5F5F22A4-C45C-43f0-A2A4-304740E0EE12"));
Run Code Online (Sandbox Code Playgroud)
我想要做的是在运行时在编译库中查找所有实例.例如,实例化AboutToken时的底层代码是使用构造函数属性创建新的LocalisationToken.我的要求是恢复Guid和默认文本,例如"条款和条件"和595FB313-4940-489b-9CC8-4B9BF0B62E8B
如果我在包含LocalisationToken的程序集上使用GetTypes(),我只需要获取各种派生类的AboutToken,AdminToken等.我需要实际的实例.
碰巧的是,我根本不需要派生类.但是,即使所有实例都标记为"LocalisationTokens",我还需要迭代这些吗?
我可以理解Type.GetType()Object的类型将会得到的场景,但是Type.GetElementType()它的作用是什么,它有什么作用?
任何人都可以清楚地解释它吗?
由于System.Type类用于反射.System.Type中定义的大多数成员都是抽象的.在此代码中,FullName属性用于获取类名,该名称在System.Type中声明为abstract
namespace ConsoleApplication93
{
class MyClass
{
int val;
}
class Program
{
static void Main(string[] args)
{
Type t = typeof(MyClass);
Console.WriteLine(t.FullName);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
FullName实现在哪里?
更新:这是System.Type定义的方式
public abstract string FullName { get; }
Run Code Online (Sandbox Code Playgroud)
但它是抽象的,所以这个属性的实际实现在哪里
让我们假设,我们有以下三种类型:
class class1{ public static int serial=1};
class class2{ public static int serial=2};
class class3{ public static int serial=3};
Run Code Online (Sandbox Code Playgroud)
序列可以是静态字段或属性,如:
class class1{ public override byte serial {get{return 0x01; }}};
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我从某处收到序列值,需要反映相应的类.是否可以使用该项目的序列字段反映任何这些类型?我是否必须在序列ID和类名之间创建一个映射表来查找反射的相关类名?或System.Reflection允许我直接从其字段或属性值中找到类?我认为这将是一种更好的方法,因为我们不需要为新类型编辑表格.
谢谢你的帮助.
我试图通过 MethodInfo 调用调用一个可等待的方法。
MethodInfo.Invoke() 返回类型对象,在我可以等待它之前需要将其转换为任务。如果我使用 Task 的泛型参数手动转换返回类型,则该过程可以正常工作。
但是,我可以调用许多具有不同返回类型的方法。我如何处理返回类型?
public class Repository
{
public IEnumerable<Foo> GetListAsync(int criteria)
{
return new List<Foo> {new Foo {Bar = "1"}, new Foo {Bar = "2"}};
}
}
public class Foo
{
public string Bar { get; set; }
}
public class Precache
{
public static void RegisterPreCache(Repository instanceObject)
{
var preCachedType = typeof (Repository);
var preCachableMethods =
preCachedType
.GetMethods();
foreach (var cachableMethod in preCachableMethods)
{
var resultTask =
(Task<IEnumerable<Foo>>) cachableMethod.Invoke(instanceObject,
new object[]
{1});
Task.Run(async () …Run Code Online (Sandbox Code Playgroud) 我正在研究C#编译器,并试图了解数学运算规则。
我发现==两个不同原始类型之间的运算符行为令人费解。
int a = 1;
float b = 1.0f;
Console.WriteLine(a == b);
Run Code Online (Sandbox Code Playgroud)
这实际上编译为
.locals init (
[0] int32,
[1] float32
)
IL_0000: nop
IL_0001: ldc.i4.1
IL_0002: stloc.0
IL_0003: ldc.r4 1
IL_0008: stloc.1
IL_0009: ldloc.0
IL_000a: conv.r4
IL_000b: ldloc.1
IL_000c: ceq
Run Code Online (Sandbox Code Playgroud)
意思是
(float)a == (float)b
Run Code Online (Sandbox Code Playgroud)
我的期望是(int)a == (int)b因为左值是integer。
有什么原因导致这种结果?
int->float比float->intc# ×10
.net ×3
reflection ×3
asp.net ×2
activator ×1
asynchronous ×1
cil ×1
expression ×1
propertyinfo ×1
viewbag ×1