我对编程很新(刚刚完成大学).
在过去的4年里,我一直在思考面向对象的开发以及这种方法的众多优点.
我的问题是
在开发应用程序中使用纯面向对象数据库不是更容易吗?
为什么面向对象的数据库不像关系那样分散?
从我的观点来看,使用OO数据库是有意义的,后者将避免在表上复杂对象的映射所需的众多构造.
Android有没有办法在不调用任何构造函数的情况下实例化对象?
在Java中,Sun有sun.reflect.ReflectionFactory.getReflectionFactory().newConstructorForSerialization(),在.Net中我们有System.Runtime.Serialization.FormatterServices.GetUninitializedObject()但我在Android平台上找不到类似的东西.
给定MethodDeclarationSyntax对象,如何找出方法的声明类型?
我的实际问题是我需要弄清楚引用的方法是否正在实现接口方法.
例如,给定下面的代码,如果我有Dispose()方法的MethodDeclarationSyntax ,那么如何判断它是IDisposable.Dispose()的实现?
using System;
abstract class InterfaceImplementation : IDisposable
{
public abstract void Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我试图获取方法的声明类型(并检查类型)没有成功(Parent属性给我回到InterfaceImplementation类).
我也试图抓住方法的语义符号:
var methodSymbol = (MethodSymbol) semanticModel.GetDeclaredSymbol(methodDeclaration);
Run Code Online (Sandbox Code Playgroud)
但无法发现任何可以帮助我的东西.
想法?
C# 编译器在从进行转换时是否有任何理由发出conv.r8?double -> double
这看起来完全没有必要(从 int -> int、char -> char 等进行转换)不会发出等效的转换指令(正如您在该I2I()
方法生成的 IL 中看到的那样)。
class Foo
{
double D2D(double d) => (double) d;
int I2I(int i) => (int) i;
}
Run Code Online (Sandbox Code Playgroud)
IL 的结果为:
.class private auto ansi '<Module>'
{
} // end of class <Module>
.class private auto ansi beforefieldinit Foo
extends [System.Private.CoreLib]System.Object
{
// Methods
.method private hidebysig
instance float64 D2D (
float64 d
) cil managed
{
// Method begins at RVA 0x2050 …
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我希望对System.Action
类型的两个引用都表示为QualifiedNameSyntax,但第二个引用表示为MemberAccessExpressionSyntax。
那是对的吗?如果是这样,为什么不能是 a QualifiedNameSyntax
?
class Foo
{
public void M(object o)
{
var t = typeof(System.Action); // 1
switch(o)
{
case System.Action: // 2
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)