小编Chr*_*h K的帖子

接口应该定义特定于实现的枚举值吗?

考虑以下类的组织:

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)

由于两个餐厅提供完全不同的套菜,这将是(设计方面)来表示的正确方法typedish在界面?

这将是一个很好的设计决策定义枚举列出所有的菜-意大利和中国-作为接口的一部分,并用它作为枚举typedish

c# java oop interface

7
推荐指数
1
解决办法
99
查看次数

为什么编译器选择了错误的方法重载?

我有这个简单的方法:

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)

c# polymorphism unity-game-engine

5
推荐指数
1
解决办法
3681
查看次数

为什么ReadAsync在FileStream和C#中的StreamReader中更快?

我正在编写一种使用新的ReadAsync方法读取大文件的方法.在我的测试看起来像FileStream ReadAsync比StreamReader更快,不知道为什么?

ReadStreamReaderAsync

线程ID在等待之前:9

等待后的线程ID:13

时间:76626

总字节数:687184052

ReadFileStreamAsync

线程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)

async-await

3
推荐指数
1
解决办法
2360
查看次数