我有以下抽象类,不能更改.
public abstract class AbstractThing {
public String GetDescription() {
return "This is " + GetName();
}
public abstract String GetName();
}
Run Code Online (Sandbox Code Playgroud)
现在我想从中实现一些新的动态类型.
AssemblyName assemblyName = new AssemblyName();
assemblyName.Name = "My.TempAssembly";
AssemblyBuilder assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicThings");
TypeBuilder typeBuilder = moduleBuilder.DefineType(someName + "_Thing",
TypeAttributes.Public |
TypeAttributes.Class,
typeof(AbstractThing));
MethodBuilder methodBuilder = typeBuilder.DefineMethod("GetName",
MethodAttributes.Public |
MethodAttributes.ReuseSlot |
MethodAttributes.Virtual |
MethodAttributes.HideBySig,
null,
Type.EmptyTypes);
ILGenerator msil = methodBuilder.GetILGenerator();
msil.EmitWriteLine(selectionList);
msil.Emit(OpCodes.Ret);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试实例化via时
typeBuilder.CreateType();
Run Code Online (Sandbox Code Playgroud)
我得到一个例外,说GetName没有实现.我在这里做错了吗?我看不出问题.
另外,通过名称实例化这样一个类的限制是什么?例如,如果我尝试通过"My.TempAssembly.x_Thing"实例化它是否可用于实例化而不生成Type?
我为一些简单的计算创建了一个辅助方法.这个辅助方法只返回一个整数.我需要控制器和视图中的帮助器.
不幸的是,它在视图中运行良好,但在控制器中运行良 我收到了undefined local variable or method错误.我该如何解决?
谢谢大家
假设我有以下xml文件:
<a>
<b>
<c></c>
</b>
<b>
<c></c>
</b>
</a>
var nodes = doc.SelectNodes("/a/b");
Run Code Online (Sandbox Code Playgroud)
将选择两个b节点.
然后我循环这两个节点,例如:
foreach (XmlNode node in nodes) { }
Run Code Online (Sandbox Code Playgroud)
但是,当我调用node.SelectNodes("/a/b/c");它仍然返回两个值而不仅仅是后代.是否可以选择仅从当前下降的节点node?
我有员工表,其empid长度为INT 3,
但它接受超过3个字符....
怎么可能
(这是在PHPMYADMIN中测试的)
如何在Java中将MS Word引号和撇号转换为常规引号和撇号字符?这些角色的unicode号是多少?
"你好吗?"
'你好'
由于Stack Overflow自动修复它们,因此它们在编辑器中的显示方式
至
"你好吗?"
'你好'
有没有办法将我的Flex Web应用程序连接到Active Directory,并获取登录的用户名?
现在我们有一个PHP脚本连接到flex应用程序,它从用户获取用户/传递输入并检查AD中是否有这样的用户,并且密码是正确的.
我不想要求用户/通行证,而是让应用程序获得与其连接的域用户名,因此我可以使用它(检查用户是否可以访问我的应用程序等).
有办法吗?
我有一个由其他人编码的程序.它有一个函数RegGetValue用作:
uFuncReturnValue = RegOpenKeyExA( HKEY_LOCAL_MACHINE,
acSubKey,
NULL,
KEY_READ | KEY_WRITE,
&hRegistry
);
//Store signature of the disk in the first 32 bytes of structVal
if( uFuncReturnValue != ERROR_SUCCESS )
{
printf("Unable to open registry with error %u\n", uFuncReturnValue);
exit(EXIT_FAILURE);;
}
uFuncReturnValue = RegGetValueA( hRegistry,
NULL,
"\\DosDevices\\C:",
RRF_RT_REG_BINARY,
NULL,
(LPVOID)&structVal,
&dwSize
);
Run Code Online (Sandbox Code Playgroud)
此代码块在Windows 7上完美运行,但在Windows XP(32位)上运行时返回错误.因为32位xp没有RegGetValue函数所以我试图使用RegQueryValueEX但是我在向这个函数传递参数时遇到了问题.我认为它应该用于某些事情:
uFuncReturnValue = RegQueryValueExA ( hRegistry,
"\\DosDevices\\J:",
NULL,
NULL,
(LPBYTE) &structVal,
&dwSize
);
Run Code Online (Sandbox Code Playgroud)
但是这里有些错误,因为代码编译成功,但是当我执行它时,我收到一条消息:
程序'(128)myProgram.exe:Native'已退出代码1(0x1).
有人可以帮我吗?
我一直在使用System.Diagnostics.Trace进行日志记录是一个非常基本的应用程序.一般来说,我只需要做它.缺点是,如果我打电话
Trace.TraceInformation("Some info");
Run Code Online (Sandbox Code Playgroud)
输出是"SomeApp.Exe Information:0:Some info".最初,这让我很开心,但不再这样.我想将"Some info"输出到控制台.所以我认为编写一个cusom TraceListener,而不是使用内置的ConsoleTraceListener,可以解决问题.我可以看到一个特定的格式,我想要在第二个冒号之后的所有文本.这是我试图看看这是否有效.
class LogTraceListener : TraceListener
{
public override void Write(string message)
{
int firstColon = message.IndexOf(":");
int secondColon = message.IndexOf(":", firstColon + 1);
Console.Write(message);
}
public override void WriteLine(string message)
{
int firstColon = message.IndexOf(":");
int secondColon = message.IndexOf(":", firstColon + 1);
Console.WriteLine(message);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我输出firstColon的值,它总是-1.如果我提出一个断点,那么消息总是只是"一些信息".所有其他信息来自哪里?
所以我在调用Console.WriteLine之前看了一下调用堆栈.调用我的WriteLine方法的方法是:System.dll!System.Diagnostics.TraceListener.TraceEvent(System.Diagnostics.TraceEventCache eventCache,string source,System.Diagnostics.TraceEventType eventType,int id,string message)+ 0x33 bytes
当我使用Reflector查看此消息时,这一切看起来都非常简单.在将其发送到Console.WriteLine后,我看不到任何更改字符串值的代码.唯一可以更改底层字符串值的方法是调用UnsafeNativeMethods.EventWriteString,它有一个参数,指向消息的指针.
有谁知道这里发生了什么,我是否可以改变输出只是我的消息没有额外的绒毛.我可以将一些字符串"Some info"传递给Console.WriteLine(或任何其他方法)以及输出的字符串不同,这似乎是邪恶的魔法.
编辑:我找到了魔法.显然这不是魔术.在调用WriteLine之前,Write方法从对WriteHeader的调用中调用,这是我认为魔法正在发生的地方.
需要代码在java中创建连接池吗?我们如何确保连接池不返回已在使用的同一对象?如果客户端从连接池中取出连接后关闭连接会怎么样?
我想用简单的Java术语创建它,并希望看到它在多线程环境中如何工作.我的意思是哪些方法将同步,哪些方法不同步.这门课还会成为公共课吗?如果是,则任何人都可以访问此类并重新初始化连接池?
我有一些代码如下.但我不知道如何"关闭来自池的连接将其返回到池中,它不会在物理上关闭连接." 此外,我没有理解这一点"因为如果连接已从池中借用而尚未返回,则它不是"可用"且无法重新分配给池中的另一个客户端.
import java.util.*;
import java.sql.*;
class ConnectionPoolManager
{
String databaseUrl = "jdbc:mysql://localhost:3306/myDatabase";
String userName = "userName";
String password = "userPass";
Vector connectionPool = new Vector();
public ConnectionPoolManager()
{
initialize();
}
public ConnectionPoolManager(
//String databaseName,
String databaseUrl,
String userName,
String password
)
{
this.databaseUrl = databaseUrl;
this.userName = userName;
this.password = password;
initialize();
}
private void initialize()
{
//Here we can initialize all the information that we need
initializeConnectionPool();
}
private void initializeConnectionPool()
{
while(!checkIfConnectionPoolIsFull())
{ …Run Code Online (Sandbox Code Playgroud)