我的错误是:
错误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();
如果有可能请某人打电话给我,这是我的错误。 谢谢你的帮助
答案 0 :(得分:7)
班级不公开。将其更改为:
public class CheckTexture
{
Thread Search;
public CheckTexture()
{
Search = new Thread(Scan);
Search.Start();
}
答案 1 :(得分:5)
在C#中,类的默认访问修饰符为internal
。
因此,您的CheckTexture
课程为internal
。将其更改为public
喜欢;
public class CheckTexture
{
...
}
来自Access Modifiers (C# Programming Guide)
直接在命名空间内声明的类和结构(in 换句话说,没有嵌套在其他类或结构中)可以 是公共的还是内部的。 如果没有访问权限,则内部是默认设置 指定了修饰符。
但这还不够。因为你写的时候;
CheckTexture Scan = new CheckTexture();
这将调用CheckTexture
类的无参数构造函数,其访问修饰符为protected
。也可以public
。
public CheckTexture()
{
Search = new Thread(Scan);
Search.Start();
}
答案 2 :(得分:2)
默认情况下,C#中的类是internal
。标记public
。根据@Caramiriel注释,构造函数也需要标记为public