假设我有一个接口和两个类,其中一个类实现了这个接口:
interface IAAA
{
int F1 { get; set; }
}
class AAA1
{
public int F1 { get; set; }
public int F2 { get; set; }
}
class AAA2 : IAAA
{
public int F1 { get; set; }
public int F2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在类中AAA2,属性F1是从接口"继承"(我不确定)IAAA,然后我使用反射来检查属性是否是虚拟的:
Console.WriteLine("AAA1 which does not implement IAAA");
foreach (var prop in typeof(AAA1).GetProperties())
{
var virtualOrNot = prop.GetGetMethod().IsVirtual ? "" : " not";
Console.WriteLine($@"{prop.Name} is{virtualOrNot} virtual"); …Run Code Online (Sandbox Code Playgroud) LINQ to实体支持匿名类型作为返回类型,例如:
var query = from a in b.C select new { Value = a.Value };
Run Code Online (Sandbox Code Playgroud)
和编译器生成的代码将是这样的:
private class f__AnonymousType0<j__TPar>
{
private readonly j__TPar i__Field;
public j__TPar Value
{
get { return i__Field; }
}
public f__AnonymousType0(j__TPar Value)
{
i__Field = Value;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用生成的匿名类型实例:
var query = from a in b.C select new f__AnonymousType0<string>(a.Value);
Run Code Online (Sandbox Code Playgroud)
错误:
System.NotSupportedException: Only parameterless constructors and initializers are supported in LINQ to Entities.
Run Code Online (Sandbox Code Playgroud)
将被抛出.
那么匿名类型如何在这里工作?
这是否意味着protected方法不能成为internal一种public类型?
internal class InternalReturnType
{
}
public class PublicTypeWithProtectedMethod
{
//build succeeded when I remove `protected`
internal protected InternalReturnType GetValue()
{
return new InternalReturnType();
}
}
public sealed class PublicTypeWithPublicMethod : PublicTypeWithProtectedMethod
{
public void Print()
{
var value = base.GetValue();
}
}
Run Code Online (Sandbox Code Playgroud)