我听谈话约C#4的dynamic关键词,我想知道......请问这个功能是正交的其它.NET功能,例如将它支持扩展方法?
public static class StrExtension {
public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
x.twice(); // will this work?
Run Code Online (Sandbox Code Playgroud)
注意:这个问题是在C#4发布之前提出的,这就是为什么它将在未来时使用.
我正在寻找一种方法来修改dynamicC#4.0对象上的属性,其属性名称仅在运行时已知.
有没有办法做某些事情(ExpandoObject仅用作示例,这可能是任何实现的类IDynamicMetaObjectProvider):
string key = "TestKey";
dynamic e = new ExpandoObject();
e[key] = "value";
Run Code Online (Sandbox Code Playgroud)
这相当于:
dynamic e = new ExpandoObject();
e.TestKey = "value";
Run Code Online (Sandbox Code Playgroud)
或者是前进反思的唯一途径?
我想用C程序读取用户的输入.我不想使用数组,
char names[50];
Run Code Online (Sandbox Code Playgroud)
因为如果用户给出长度为10的字符串,那么剩余的空间就会被浪费掉.
如果我使用字符指针,
char *names;
Run Code Online (Sandbox Code Playgroud)
那么我需要以这样的方式为它分配内存,
names = (char *)malloc(20 * sizeof(char));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,也存在内存浪费的可能性.
所以,我需要的是为字符串动态分配内存,该字符串与字符串的长度完全相同.
让我们假设,
如果用户输入是"stackoverflow",那么分配的内存应该是14(即字符串的长度= 13和'\ 0'的1个额外空间).
我怎么能实现这个目标?
我知道如何用LD_PRELOAD覆盖一个库,例如,如下所示.
LD_PRELOAD =./ getpid.so ./testpid
现在我的问题是如何覆盖多个文件.假设我想覆盖getpid和getid,我该如何指定?
我的数据库中有一个表,用于管理我的应用程序之间的关系.它的本质是非常基本的 - parentType,parentId,childType,childId ...... all as int.之前我已经完成了这个设置,但是当我有6个不同的表我试图链接时,我使用了一个开关/案例设置.现在我有30个表,我正在尝试这样做,我希望能够这样做,而无需在我的switch命令中写入30个案例条目.
有没有办法可以使用字符串引用.Net类?我知道这是无效的(因为我尝试了几种变体):
Type t = Type.GetType("WebCore.Models.Page");
object page = new t();
Run Code Online (Sandbox Code Playgroud)
我知道如何获取对象的类型,但是我如何动态使用它来创建一个新对象?
什么是动态加载java类文件的好方法,以便编译到jar中的程序可以读取目录中的所有类文件并使用它们,以及如何编写文件以便它们具有相关的必要包名到罐子里?
如何在Ruby中动态设置对象属性,例如
def set_property(obj, prop_name, prop_value)
#need to do something like > obj.prop_name = prop_value
#we can use eval but I'll prefer a faster/cleaner alternative:
eval "obj.#{prop_name} = #{prop_value}"
end
Run Code Online (Sandbox Code Playgroud) 根据我的理解,动态类型与弱类型相同,强类型与静态类型相同.有什么不同?谢谢
我正在尝试做一个简单的hello世界来测试在C#中嵌入IronPython但似乎无法解决这个问题.
这是我的C#文件;
using System;
using IronPython.Hosting;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using System.IO;
public class dynamic_demo
{
static void Main()
{
var ipy = Python.CreateRuntime();
dynamic test = ipy.UseFile(@"../../Test.py");
test.Simple();
}
}
Run Code Online (Sandbox Code Playgroud)
这是python类;
import sys
def Simple():
print 'Hello from Python'
print "Call Dir(): "
print dir()
print "Print the Path: "
print sys.path
Run Code Online (Sandbox Code Playgroud)
我的目标.NET框架是4.0,我正在使用IronPython 2.6 ..
当我运行这个时,我得到2个错误来自一个名为"CSC"的文件; 错误5缺少编译器所需的成员
'Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember'C:\ Users\Tolga\documents\visual studio 2012\Projects\WindowsFormsApplication1\consoleTest\CSC consoleTest
另一个来自我创建的C#文件
错误6无法找到编译动态表达式所需的一种或多种类型.你错过了参考吗?C:\ Users\Tolga\documents\visual studio 2012\Projects\WindowsFormsApplication1\consoleTest\Program.cs 17 9 consoleTest
这是Build的输出
1>------ Build started: Project: consoleTest, Configuration: Debug Any …Run Code Online (Sandbox Code Playgroud) (这个问题类似于我看过的很多问题,但大多数问题对我正在做的事情都不够具体)
背景:
我的程序的目的是让使用我的程序的人轻松制作自定义"插件",然后编译并加载到程序中以供使用(与我的程序中实现的不完整,慢速解析器相比).我的程序允许用户将代码输入到预定义的类中,该类扩展了与我的程序一起打包的编译类.他们将代码输入到文本窗格中,然后我的程序将代码复制到被覆盖的方法中.然后将其保存为.java文件(几乎)为编译器准备好了.该程序运行javac(java编译器),并将保存的.java文件作为输入.
我的问题是,我如何得到它,以便客户端(使用我的编译程序)将这个java文件(扩展我的InterfaceExample)保存在他们的计算机上的任何地方,让我的程序编译它(不说"找不到符号:InterfaceExample" )然后加载它并调用doSomething()方法?
我一直在看Q&A使用的是反射或ClassLoader,几乎描述了如何编译它,但没有一个对我来说足够详细/我完全不理解它们.
dynamic ×10
c# ×4
.net ×3
c ×2
java ×2
load ×2
reflection ×2
c#-4.0 ×1
class ×1
compilation ×1
external ×1
ironpython ×1
linux ×1
malloc ×1
python ×1
ruby ×1
static ×1
string ×1
weak-typing ×1
x86 ×1