C# 理解类和属性有困难

C# 理解类和属性有困难,c#,.net,class,C#,.net,Class,虽然我知道这是一个简单的问题,也是我知识上的一个空白,但请记住,我写这段代码是为了学习(详细的解释或最佳实践建议在这方面会有很大帮助) 首先,这是我的课: namespace CCQ.Crawler._2010 { public class MSSQL { public MSSQL(string connectionString) { ConnectionString = connectionString;

虽然我知道这是一个简单的问题,也是我知识上的一个空白,但请记住,我写这段代码是为了学习(详细的解释或最佳实践建议在这方面会有很大帮助)

首先,这是我的课:

namespace CCQ.Crawler._2010
{
    public class MSSQL
    {
        public MSSQL(string connectionString)
        {
            ConnectionString = connectionString;
        }

        public static string ConnectionString { get; private set; }

        /// <summary>
        /// Class to house statements that insert or update data into the database
        /// </summary>
        public class Upserts
        {
            /// <summary>
            /// Add or update a new entry on the site collection table
            /// </summary>
            /// <param name="siteCollectionName"></param>
            public void SiteCollection(string siteCollectionName)
            {
                const string queryString =
                @"INSERT INTO [dbo].[SiteCollections]
                                   ([SnapShotDate]
                                   ,[SiteCollectionName]
                                   ,[SiteWebCount]
                                   ,[ContentDatabase]
                                   ,[SiteWebApplication])
                                 VALUES
                                  (@snapShotDate, @siteCollectionName, @siteWebCount, @contentDatabase, @siteWebApplication)";
                using (var connection = new SqlConnection(ConnectionString))
                {
                    using (var cmd = new SqlCommand(queryString, connection))
                    {
                        connection.Open();

                        cmd.Parameters.AddWithValue("snapShotDate", DateTime.Today.Date);
                        cmd.Parameters.AddWithValue("siteCollectionName", siteCollectionName);

                        cmd.ExecuteNonQuery();
                    }
                }
            }
        }
    }
}
现在我想我能用这门课做的是:

var query = new MSSQL(ConnectionString).Upserts;

query.SiteCollection("testing");
但是,那不行。当我试图声明该类时,遇到的错误是:

类名此时无效

我知道我的知识/课程结构中存在着巨大的差距,这就是原因,但我不太知道从哪里开始——我的思维中的错误在哪里?

在这行代码中:

var query = new MSSQL(ConnectionString).Upserts;
实际上,您正在构造MSSQL类的一个新实例,然后使用语法,就好像
Upserts
是您试图访问的属性一样

相反,要实例化嵌套类,您应该执行以下操作:

var mssql = new MSSQL("your connection string");
var query = new MSSQL.Upserts();
但是…

在封闭类的静态属性中存储连接字符串的方式有点奇怪,在非静态构造函数中初始化静态属性也有点奇怪

您可能不需要将
Upserts
作为嵌套类。试着把它变成一种方法

此外,您的连接字符串可以存储在实例字段/属性中,而不是静态的。

在这行代码中:

var query = new MSSQL(ConnectionString).Upserts;
实际上,您正在构造MSSQL类的一个新实例,然后使用语法,就好像
Upserts
是您试图访问的属性一样

相反,要实例化嵌套类,您应该执行以下操作:

var mssql = new MSSQL("your connection string");
var query = new MSSQL.Upserts();
但是…

在封闭类的静态属性中存储连接字符串的方式有点奇怪,在非静态构造函数中初始化静态属性也有点奇怪

您可能不需要将
Upserts
作为嵌套类。试着把它变成一种方法


此外,您的连接字符串可以存储在实例字段/属性中,而不是静态的。

'query'属于MSSQL类型。SiteCollection属性属于Upserts类型。尽管已将MSSQL中的Upserts类型定义为嵌套类型,但实际上并没有在MSSQL对象中使用Upserts类型(例如,作为属性)

我能看到的最快的方法是将Upserts属性添加到MSSQL类中,并在构造函数中实例化它

public Upserts Upserts { get; private set; }
然后,您将能够通过以下方式访问该方法:

query.Upserts.SiteCollection("...");
或者,您可以修改Upserts以接收连接字符串并直接实例化它。。。不过,这是朝着从等式中删除MSSQL迈出的一步


我知道你写这篇文章的目的是想了解类和属性,所以我不会评论这是否是一种很好的DAL方法。

'query'属于MSSQL类型。SiteCollection属性属于Upserts类型。尽管已将MSSQL中的Upserts类型定义为嵌套类型,但实际上并没有在MSSQL对象中使用Upserts类型(例如,作为属性)

我能看到的最快的方法是将Upserts属性添加到MSSQL类中,并在构造函数中实例化它

public Upserts Upserts { get; private set; }
然后,您将能够通过以下方式访问该方法:

query.Upserts.SiteCollection("...");
或者,您可以修改Upserts以接收连接字符串并直接实例化它。。。不过,这是朝着从等式中删除MSSQL迈出的一步


我知道你写这篇文章的目的是想了解类和属性,所以我不会评论这是否是一种很好的DAL方法。

我认为在这种情况下没有必要使用嵌套类。你可以试试这个:

/// <summary>
/// <para>MSSQL class</para>
/// </summary>
public class MSSQL
{
    #region Class field declaration

    private string f_connectionString;

    #endregion

    #region Public method

    /// <summary>
    /// <para>Static method for getting the class instance.</para>
    /// </summary>
    /// <param name="p_connectionString">MSSQL connection string</param>
    /// <returns><see cref="MSSQL"/></returns>
    public static MSSQL Create(string p_connectionString)
    {
        return new MSSQL(p_connectionString);
    }

    public void SiteCollection(string p_siteCollectionName)
    {
        //Your Logic here.
    }

    #endregion


    #region Constructor
    /// <summary>
    /// <para>Hide the default constructor</para>
    /// </summary>
    private MSSQL()
    {

    }

    /// <summary>
    /// <para>Private constructor for Static method</para>
    /// </summary>
    /// <param name="p_connectionString">MSSQL connection string</param>
    private MSSQL(string p_connectionString)
    {
        this.f_connectionString = p_connectionString;
    }
    #endregion
}
通过以下方式获取网站集:

var siteCollection = instance.SiteCollection("Testing");

我认为在这种情况下没有必要使用嵌套类。你可以试试这个:

/// <summary>
/// <para>MSSQL class</para>
/// </summary>
public class MSSQL
{
    #region Class field declaration

    private string f_connectionString;

    #endregion

    #region Public method

    /// <summary>
    /// <para>Static method for getting the class instance.</para>
    /// </summary>
    /// <param name="p_connectionString">MSSQL connection string</param>
    /// <returns><see cref="MSSQL"/></returns>
    public static MSSQL Create(string p_connectionString)
    {
        return new MSSQL(p_connectionString);
    }

    public void SiteCollection(string p_siteCollectionName)
    {
        //Your Logic here.
    }

    #endregion


    #region Constructor
    /// <summary>
    /// <para>Hide the default constructor</para>
    /// </summary>
    private MSSQL()
    {

    }

    /// <summary>
    /// <para>Private constructor for Static method</para>
    /// </summary>
    /// <param name="p_connectionString">MSSQL connection string</param>
    private MSSQL(string p_connectionString)
    {
        this.f_connectionString = p_connectionString;
    }
    #endregion
}
通过以下方式获取网站集:

var siteCollection = instance.SiteCollection("Testing");

那么我的连接字符串呢?按照您编写它的方式,首先需要构造
MSSQL
的实例来初始化静态
ConnectionString
属性,但这不是最好的方法。有关更多信息,请参见我的编辑。Hmmm。谢谢,更多地了解它-感谢您的指导!那么我的连接字符串呢?按照您编写它的方式,首先需要构造
MSSQL
的实例来初始化静态
ConnectionString
属性,但这不是最好的方法。有关更多信息,请参见我的编辑。Hmmm。谢谢,更多地了解它-感谢您的指导!你可以在网上找到很多关于这个主题的指导。虽然有点过时,但本文将为您提供一个开始:。请记住,目前大多数情况下,开发人员会选择使用诸如NHibernate或EntityFramework之类的ORM,而不是从头开始使用他们自己的DAL。你可以在web上找到关于这个主题的很多指导。虽然有点过时,但本文将为您提供一个开始:。请记住,目前大多数情况下,开发人员会选择使用诸如NHibernate或EntityFramework之类的ORM,而不是从头开始使用自己的DAL。