小编Jam*_*mes的帖子

在C#中的基础构造函数之前执行派生的构造函数

我的问题是我想将一个对象传递给派生类,但它必须在基类构造函数之前完成,因为基类将立即调用派生类Start()使用该对象的方法.

以下是基类的摘录(为方便起见,从BarcodeScanner重命名).

public abstract class MyBase
{    
    public MyBase()
    {
        if (Initialize())
            this.Start();
    }

    public abstract bool Initialize();
    public abstract void Start();
}
Run Code Online (Sandbox Code Playgroud)

这是我正在创建的派生类.

class MyDerived : MyBase
{
    private string sampleObject;

    public MyDerived (string initObject)
    {
        sampleObject = initObject;
    }

    public override bool Initialize() 
    { 
        return GetDevice();
    }
    public override void Start() 
    { 
        Console.WriteLine("Processing " + sampleObject.ToString()); 
    }
}
Run Code Online (Sandbox Code Playgroud)

我怀疑你可以让C#在基础构造函数之前执行派生构造函数; 所以我真的只是在寻找一个解决方案,在使用对象之前将对象传递给派生类.

我通过在MyDerived构造函数中放置Initialize/Start if块来解决这个问题.但是,还有其他类派生自基类; 所以我最终不得不在每个派生类中重复这个Initialize/Start代码块.我想看一个修改基类的替代方法.

c# constructor abstract-class derived-class

16
推荐指数
2
解决办法
2万
查看次数

什么是关系数据库中客户端可创建和可修改的Web表单的最佳实现?

在我参与的几个Web应用程序项目中,客户端要求能够创建自己的表单.问题出现在如何存储其表单定义,以及如何将用户输入的值存储到这些自定义表单中.

我已经看到它有两种方式:

  1. 假设客户端仅定义了多少个字段,以及与这些字段关联的标签; 我们可以找到一个涉及四个表的解决方案. FormDefinition,FormFieldDefinition,FormInstances,FormFieldValues.客户端对FormDefinition和进行更改FormFieldDefinition,并且Web应用程序使用该信息呈现HTML Web表单,网站访问者(最终用户)将在该表单上提交表单,其中FormInstances创建新行并将值保存在FormFieldValues表.

    行中FormDefinition定义了表单,即form definition ID = 2, form title = 'Car Registration Form'.行中FormFieldDefinition定义表单的字段FormDefinition,即field definition ID = 7, field label = 'Car Model', field type = 'varchar(50)'.行FormInstance是用户填写的每个表单的实例,即definition id = 2, date_entered = '2008-09-24'.并且行FormFieldValues是用户的条目,即field definition = 7, value = 'Tiburon'.

    不幸的是,这意味着value列FormFieldValues必须是客户端可能在Web表单中指定的最大可能大小的char类型...并且当表单定义更改时,管理旧数据变得不确定.但用户条目是可查询的(我写了一个快速查询,列出了给定表单ID的用户条目,这类似于 …

forms database-design webforms entity-attribute-value

6
推荐指数
1
解决办法
775
查看次数

当包名不同时,如何在分支之间合并?

我想知道是否有一种简单的方法可以在同一个Android项目的分支之间进行合并,其中包名称(以及目录名称)不同.由于我将拥有许多分支机构,并且所有分支都需要保持最新,因此我正在寻找有效地进行这些合并的最佳方法.

我们的Android项目的目录树看起来像这样

\assets
\libs\...
\res\...
\src\com\mycompany\mainproject
AndroidManifest.xml
build.xml
myproject.iml
myproject.ipr
Run Code Online (Sandbox Code Playgroud)

当我们为客户端制作自定义版本时,我会更改包名称,例如client1app或client2app.如果要在Android Market中作为不同客户端的不同应用程序存在,则需要不同的程序包名称.所以我创建了包含相同文件名和目录结构的单独分支,但src文件夹名称除外,必须更改该名称以匹配包名称.因此client1app或client2app将具有以下目录结构:

\src\com\mycompany\client1app
\src\com\mycompany\client2app
Run Code Online (Sandbox Code Playgroud)

这些文件夹下的文件名仍与mainproject相同.只是目录名称不同.(除了package子句之外,文件内容大多相同.)

我们使用SVN进行源代码控制.所以,当我从mainproject合并到client1app时,我想我必须首先合并顶级文件和其他目录,然后为src\com\mycompany\mainproject手动执行合并到src\com\mycompany\client1app.这是五种不同的合并,(对于顶级和四个子目录).如果不是目录名称不同,这将是一个简单的单步合并,我知道如何做到这一点.

问题1:有没有任何配置我可以告诉SVN\src\com\mycompany\mainproject和\ src\com\mycompany\client1app在合并时包含相同的文件名?或者其他一些方法可以在两个分支之间轻松合并cherrypick?

问题2:Git会更适合这个吗?

svn git android

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

我可以在Xamarin中声明没有任务块的任务吗?

所以我发现烦人的是,使用自定义任务方法,我需要总是返回一个新的Task,就像下面的Foo0()一样.但有趣的是,在Xamarin中,如果放入async关键字,则可以删除返回的新Task块.

Foo0和Foo1是否相同?

这是Xamarin实现的故障,还是在VS2012中也能正常工作?

但是Foo1给出了编译器警告,我不能只删除async关键字,否则它将停止编译,即使代码的主体保持不变.(我发现Foo0中的额外新任务块是多余的,从方法声明中我应该明白我想要运行一个新任务.)

// the following is explicit with returning a new task
Task<int> Foo0()
{
    return Task.Run(() =>
    {
        return 5;
    });
}

// the following gives warning "Async block lacks `await` operator and will run synchronously"
async Task<int> Foo1()
{
    return 5;
}

/* the following does not compile
Task<int> Foo2()
{
    return 5;
}
*/
Run Code Online (Sandbox Code Playgroud)

c# async-await xamarin

0
推荐指数
1
解决办法
1398
查看次数