考虑以下类的组织:
interface Restaurant
{
public void dine(Object dish);
}
class ItalianRestaurant implements Restaurant
{
public void dine(Object dish)
{
// eat with spoon and forks
}
}
class ChineseRestaurant implements Restaurant
{
public void dine(Object dish)
{
// eat with chopsticks
}
}
Run Code Online (Sandbox Code Playgroud)
由于两个餐厅提供完全不同的套菜,这将是(设计方面)来表示的正确方法type的dish在界面?
这将是一个很好的设计决策定义枚举列出所有的菜-意大利和中国-作为接口的一部分,并用它作为枚举type的dish?
我有这个简单的方法:
public void CacheDelegate(Object obj, MemberInfo memberInfo)
{
switch (memberInfo.MemberType)
{
case MemberTypes.Field:
var fieldInfo = (FieldInfo) memberInfo;
CacheDelegate(obj, fieldInfo);
break;
case MemberTypes.Property:
var propertyInfo = (PropertyInfo) memberInfo;
CacheDelegate(obj, propertyInfo);
break;
case MemberTypes.Method:
var methodInfo = (MethodInfo) memberInfo;
CacheDelegate(obj, methodInfo);
break;
default:
throw new Exception("Cannot create a delegate for MemberInfo provided.");
}
}
Run Code Online (Sandbox Code Playgroud)
上面的方法解析了 memberInfo 的类型,并从下面调用了适用的方法:
public void CacheDelegate(Object obj, FieldInfo fieldInfo)
{
// Do stuff...
}
public void CacheDelegate(Object obj, PropertyInfo propertyInfo)
{
// Do stuff...
}
public sealed …Run Code Online (Sandbox Code Playgroud) 我正在编写一种使用新的ReadAsync方法读取大文件的方法.在我的测试看起来像FileStream ReadAsync比StreamReader更快,不知道为什么?
线程ID在等待之前:9
等待后的线程ID:13
时间:76626
总字节数:687184052
线程ID在等待之前:9
等待后的线程ID:10
时间:19167
总字节数:687184052
static async Task<long> ReadStreamReaderAsync(string filename)
{
Console.WriteLine("Thread ID Before Await : {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
long totalBytes = 0;
var sp = new Stopwatch();
sp.Start();
using (StreamReader reader = new StreamReader(filename, Encoding.Default))
{
char[] buffer = new char[0x1000];
int numRead;
while ((numRead = await reader.ReadAsync(buffer, 0, buffer.Length)) != 0)
{
totalBytes += numRead;
}
}
sp.Stop();
Console.WriteLine("Thread ID After Await : {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("Time : {0}", sp.ElapsedMilliseconds);
return totalBytes;
} …Run Code Online (Sandbox Code Playgroud)