为什么要在其中调用的同一个类中声明的公共类型需要实例化?

时间:2013-01-03 11:29:26

标签: c# sql-server-ce windows-phone-8

使用此代码:

var locationsInDB = from TaSLs_SQLCELocationDataDefinition location in
                        TaSLs_SQLCELocation.TaSLs_SQLCELocationDataDefinitions
                    where location.SavedToCloud = false
                    select location;

......我明白了,

  

“*非静态字段,方法或者需要对象引用   property'TaSLS_PhoneApp.MainPage.TaSLs_SQLCELocation'*“

我在一个单独的类中声明了TaSLs_SQLCELocationDataContext:

public class TaSLs_SQLCELocationDataContext : DataContext
{
    public static string DBConnectionString = "Data Source=isostore:/gr8GooglyMoogly.sdf";

    public TaSLs_SQLCELocationDataContext(string connectionString)
        : base(connectionString)
    { }

    public Table<TaSLs_SQLCELocationDataDefinition> TaSLs_SQLCELocationDataDefinitions;
}

我无法将TaSLs_SQLCELocationDataContext设为静态,因为它实现了DataContext

如果我像这样实例化那个类:

TaSLs_SQLCELocationDataContext tsldc = new TaSLs_SQLCELocationDataContext();
var locationsInDB = from TaSLs_SQLCELocationDataDefinition location in
                    tsldc.TaSLs_SQLCELocationDataDefinitions
                    where location.SavedToCloud = false
                    select location;

......我接着,

  

“*'TaSLS_PhoneApp.TaSLs_Data.TaSLs_SQLCELocationDataContext'不会   包含一个带0参数的构造函数*“

它期待什么样的论点?

3 个答案:

答案 0 :(得分:3)

期待连接字符串

答案 1 :(得分:1)

构造函数期望连接字符串由构造函数定义:

public TaSLs_SQLCELocationDataContext(string connectionString)

但是,由于您未在代码中实例化表,因此稍后将获得空引用异常。

答案 2 :(得分:1)

对于您的第一个问题“为什么在同一个类中声明的公共类型需要实例化?”你需要省略类名 - 在这种情况下是'TaSLs_SQLCELocation'并通过this关键字访问你的类属性。

但是,如果您想从定义属性的类中访问您的属性'TaSLs_SQLCELocationDataDefinitions',那么这只适用于您的案例'TaSLs_SQLCELocationDataContext'

试试这个:

var locationsInDB = from TaSLs_SQLCELocationDataDefinition location in
                    this.TaSLs_SQLCELocationDataDefinitions
                where location.SavedToCloud = false
                select location;