我可以eval("something()");在JavaScript中动态执行代码.有没有办法让我在C#中做同样的事情?
我想要做的一个例子是:我有一个整数变量(比如说i),我有多个属性名称:"Property1","Property2","Property3"等.现在,我想执行一些操作在"财产i "属性取决于的价值i.
使用Javascript这非常简单.有没有办法用C#做到这一点?
以下面的课程为例:
class Sometype
{
int someValue;
public Sometype(int someValue)
{
this.someValue = someValue;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我想使用反射创建这种类型的实例:
Type t = typeof(Sometype);
object o = Activator.CreateInstance(t);
Run Code Online (Sandbox Code Playgroud)
通常这会起作用,但是由于SomeType没有定义无参数构造函数,调用Activator.CreateInstance将抛出类型异常,MissingMethodException并带有消息" 没有为此对象定义无参数构造函数. "是否还有另一种方法可以创建此类型的实例?将无参数构造函数添加到我的所有类中会有点麻烦.
我有以下场景:
class Addition{
public Addition(int a){ a=5; }
public static int add(int a,int b) {return a+b; }
}
Run Code Online (Sandbox Code Playgroud)
我通过以下方式调用另一个类:
string s="add";
typeof(Addition).GetMethod(s).Invoke(null, new object[] {10,12}) //this returns 22
Run Code Online (Sandbox Code Playgroud)
我需要一种类似于上面的反射语句的方法来创建一个Addition类型的新对象 Addition(int a)
所以我有字符串s= "Addition",我想用反射创建一个新对象.
这可能吗?
假设我有一个非常简单的java对象,它只有一些getXXX和setXXX属性.此对象仅用于处理值,基本上是记录或类型安全(和性能)映射.我经常需要将此对象转换为键值对(字符串或类型安全)或从键值对转换为此对象.
除了反射或手动编写代码来进行此转换之外,实现此目的的最佳方法是什么?
一个示例可能是通过jms发送此对象,而不使用ObjectMessage类型(或将传入消息转换为正确类型的对象).
User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
Run Code Online (Sandbox Code Playgroud)
如何以这种方式测试某个变量是否属于某种类型?
我最近遇到了一个问题,我使用的是C#,它是通过使用反射设置一个私有成员来解决的.
我惊呆了,发现设置私有成员/字段并运行私有方法是C#中允许和可能的事情.这不是一个如何做这些事情的问题,他们有很好的记录,我的问题是:为什么?
如果将字段/成员/方法设置为私有/内部,为什么C#作为一种语言允许将这些字段设置在范围之外?我认为这会抛出某种异常.如果类要求更改或设置它们不会有方法或构造函数?
假设以下假设的继承层次结构:
public interface IA
{
int ID { get; set; }
}
public interface IB : IA
{
string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用反射并进行以下调用:
typeof(IB).GetProperties(BindingFlags.Public | BindingFlags.Instance)
Run Code Online (Sandbox Code Playgroud)
只会产生接口的属性IB,即" Name".
如果我们要对以下代码进行类似的测试,
public abstract class A
{
public int ID { get; set; }
}
public class B : A
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
该调用typeof(B).GetProperties(BindingFlags.Public | BindingFlags.Instance)将返回PropertyInfo" ID"和" Name" 的对象数组.
有没有一种简单的方法来查找接口的继承层次结构中的所有属性,如第一个示例中所示?
我有一个ArrayList,由从db导入的不同元素组成,由字符串,数字,双精度和整数组成.有没有办法使用反射类型技术来找出每个元素包含的每种类型的数据?
仅供参考:有这么多类型数据的原因是这是一段用不同的数据库编写的java代码.
鉴于一个功能,是否有可能得到它的名字?说:
func foo() {
}
func GetFunctionName(i interface{}) string {
// ...
}
func main() {
// Will print "name: foo"
fmt.Println("name:", GetFunctionName(foo))
}
Run Code Online (Sandbox Code Playgroud)
我被告知runtime.FuncForPC会有所帮助,但我不明白如何使用它.
reflection ×10
c# ×7
.net ×2
java ×2
arraylist ×1
c#-2.0 ×1
collections ×1
constructor ×1
generics ×1
go ×1
go-reflect ×1
javabeans ×1
properties ×1
types ×1