public class ProducerConsumerTest {
public static void main(String[] args) {
CubbyHole c = new CubbyHole();
Producer p1 = new Producer(c, 1);
Consumer c1 = new Consumer(c, 1);
p1.start();
c1.start();
}
}
class CubbyHole {
private int contents;
private boolean available = false;
public synchronized int get() {
while (available == false) {
try {
wait();
} catch (InterruptedException e) {
}
}
available = false;
notifyAll();
return contents;
}
public synchronized void put(int value) {
while (available == true) {
try {
wait();
} catch (InterruptedException e) {
}
}
contents = value;
available = true;
notifyAll();
}
}
class Consumer extends Thread {
private CubbyHole cubbyhole;
private int number;
public Consumer(CubbyHole c, int number) {
cubbyhole = c;
this.number = number;
}
public void run() {
int value = 0;
for (int i = 0; i < 10; i++) {
value = cubbyhole.get();
System.out.println("Consumer #"
+ this.number
+ " got: " + value);
}
}
}
class Producer extends Thread {
private CubbyHole cubbyhole;
private int number;
public Producer(CubbyHole c, int number) {
cubbyhole = c;
this.number = number;
}
public void run() {
for (int i = 0; i < 10; i++) {
cubbyhole.put(i);
System.out.println("Producer #" + this.number
+ " put: " + i);
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
}
}
}
}
//主程序
namespace MyNameSpace
{
public interface IMyInterface
{
string GetMethod();
}
public class MyClass : IMyInterface
{
public string GetMethod()
{}
}
}
如何将var ruleClass = Activator.CreateInstance(Assembly.GetExecutingAssembly().FullName, "MyNameSpace.MyClass");
if( ruleClass != null)
{
IMyInterface myClass = (IMyInterface)ruleClass;
//throws exception.
}
转换为ruleClass
类型,以便我可以调用其中的特定方法?
答案 0 :(得分:4)
使用Unwrap
方法。
IMyInterface myClass = (IMyInterface)ruleClass.Unwrap();
您也可以直接创建
var myClass = Activator.CreateInstance(typeof(MyClass)) as MyClass;
答案 1 :(得分:0)
你试过这个吗?
var ruleClass = Activator.CreateInstance(typeof(MyClass));
if (ruleClass != null)
{
var myClass = (IMyInterface)ruleClass;
myClass.GetMethod();
}
答案 2 :(得分:0)
您也可以尝试此选项
var typ = Type.GetType("MyNameSpace.MyClass", true);
var ruleClass = Activator.CreateInstance(typ);
if (ruleClass != null)
{
IMyInterface myClass = (IMyInterface)ruleClass;
//myClass is NULL.
}`