0

我的错误是:

错误 1 ​​'aCI.CheckTexture.CheckTexture()' 由于其保护级别而无法访问

我使用此代码检查一些文件 MD5/Hash:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace aCI
{
class CheckTexture
{   
    Thread Search;
    protected CheckTexture()
    {
        Search = new Thread(Scan);
        Search.Start();
    }

    protected void Scan()
    {
        if (GetMD5Hash("1.rar") != "9647997C556C5A37A63EFAFBCA4A40D0"
           || GetMD5Hash("2.rar") != "6626959A9099B4C6F5C755E0D2E57EF8"
           || GetMD5Hash("3.rar") != "4D6611A825F81024E0153E2753B8A27E")
        {
            System.Windows.Forms.MessageBox.Show(
            "Sorry come back and restor your orginal files.",
            "Error",
            System.Windows.Forms.MessageBoxButtons.OK,
            System.Windows.Forms.MessageBoxIcon.Error);
            return;
        }
    }

    #region Hash Calculator

    private static byte[] ConvertStringToByteArray(string data)
    {
        return (new System.Text.UnicodeEncoding()).GetBytes(data);
    }

    private static System.IO.FileStream GetFileStream(string pathName)
    {
        return (new System.IO.FileStream(pathName, System.IO.FileMode.Open,
             System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite));
    }

    public static string GetSHA1Hash(string pathName)
    {
        string strResult = "";
        string strHashData = "";

        byte[] arrbytHashValue;
        System.IO.FileStream oFileStream = null;

        System.Security.Cryptography.SHA1CryptoServiceProvider oSHA1Hasher =
              new System.Security.Cryptography.SHA1CryptoServiceProvider();

        try
        {
            oFileStream = GetFileStream(pathName);
            arrbytHashValue = oSHA1Hasher.ComputeHash(oFileStream);
            oFileStream.Close();

            strHashData = System.BitConverter.ToString(arrbytHashValue);
            strHashData = strHashData.Replace("-", "");
            strResult = strHashData;
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message, "Error!",
              System.Windows.Forms.MessageBoxButtons.OK,
              System.Windows.Forms.MessageBoxIcon.Error,
              System.Windows.Forms.MessageBoxDefaultButton.Button1);
        }

        return (strResult);
    }

    public static string GetMD5Hash(string pathName)
    {
        string strResult = "";
        string strHashData = "";

        byte[] arrbytHashValue;
        System.IO.FileStream oFileStream = null;

        System.Security.Cryptography.MD5CryptoServiceProvider oMD5Hasher =
              new System.Security.Cryptography.MD5CryptoServiceProvider();

        try
        {
            oFileStream = GetFileStream(pathName);
            arrbytHashValue = oMD5Hasher.ComputeHash(oFileStream);
            oFileStream.Close();

            strHashData = System.BitConverter.ToString(arrbytHashValue);
            strHashData = strHashData.Replace("-", "");
            strResult = strHashData;
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message, "Error!",
           System.Windows.Forms.MessageBoxButtons.OK,
           System.Windows.Forms.MessageBoxIcon.Error,
           System.Windows.Forms.MessageBoxDefaultButton.Button1);
        }

        return (strResult);
    }
    #endregion
  }

}

然后我在这里尝试使用上面代码中的类 CheckTexture:

 private void BtnMpLanClick(object sender, RoutedEventArgs e)
    {
        if (!File.Exists("chrome.exe"))
        {
            MessageBox.Show("Cannot find chrome.exe");
            return;
        }

        else
        {
            //Process.Start("chrome.exe");
            this.StartTheProcess("chrome.exe", "");

            Thread.Sleep(10);

            try
            {
                // I have error on this line:

                CheckTexture Scan = new CheckTexture();

            }
            catch (Exception)

            { }

        }

    }

但我在这一行有这个错误:

CheckTexture Scan = new CheckTexture();

如果可能的话,请有人告诉我我的错误是什么。谢谢你的帮助

4

3 回答 3

7

课程不公开。将其更改为:

public class CheckTexture
{   
    Thread Search;
    public CheckTexture()
    {
        Search = new Thread(Scan);
        Search.Start();
    } 
于 2013-06-08T19:57:40.173 回答
5

在 C# 中,类的默认访问修饰符是internal.

所以你的CheckTexture课是internal. 改成public喜欢;

public class CheckTexture
{
 ...   
}

Access Modifiers (C# Programming Guide)

直接在命名空间中声明的类和结构(换句话说,不嵌套在其他类或结构中)可以是公共的或内部的。如果未指定访问修饰符,则默认为 Internal。

但这还不够。因为当你写作时;

CheckTexture Scan = new CheckTexture();

CheckTexture这将调用其访问修饰符为的类的无参数构造函数protected。也做public

public CheckTexture()
{
    Search = new Thread(Scan);
    Search.Start();
}
于 2013-06-08T19:59:38.723 回答
2

默认情况下,C# 中的类是internal. 标记它public。基于@Caramiriel 注释,构造函数也需要标记public

于 2013-06-08T19:58:00.040 回答