c# - c# 由于保护级别无法访问类
问题描述
嘿伙计们,我是 C# 的新手,我正在练习类和方法之类的东西,我做了以下代码:
using System;
namespace ConsoleApp6
{
class Book
{
static void Review()
{
int x = 10;
Console.WriteLine(x);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Book.Review);
}
}
}
这真的很简单,但是当我运行它时说它无法访问“审查”方法,因为它的保护级别,请帮助
解决方案
这个错误的原因是方法的默认访问修饰符是private
,这意味着只有同一个类的成员才能看到它们。
由于您想从同一命名空间中的另一个类引用该方法,因此您需要通过将访问修饰符更改为internal
(这意味着同一程序集中的任何类都可以看到它)或public
(这意味着它可以被大家看到)。
其中任何一个都可以解决您的问题:
// Only members of the same assembly can access this method
internal static void Review() { // code omitted }
// Everyone can access this method
public static void Review() { // code omitted }
您可以在此处阅读有关访问修饰符的更多信息。
Review
此外,您已设置to的返回值,void
然后尝试将其传递给Console.WriteLine()
需要实际类型的方法。这将导致编译错误(类似于:“无法转换void
为[someType]
”)。
为了解决这个问题,您可以只从 main 调用该方法,然后让该方法写入控制台:
private static void Main(string[] args)
{
Book.Review();
}
或者,我的偏好是让方法返回一个字符串,然后将其写入Main
方法中的控制台(我更喜欢这样,因为它使方法更加通用 - 有人可以调用它来简单地检索评论而不将其显示给控制台,例如):
public static string Review()
{
int x = 10;
return x.ToString();
}
请注意,当您调用该方法时,您需要在名称后加上括号:
private static void Main(string[] args)
{
Console.WriteLine(Book.Review());
}
推荐阅读
- zsh - Zsh 与 Bash 中的参数扩展:“${VAR,,}”的等价物是什么?
- assembly - 从文本文件中读取并将文件中的十六进制值相加
- in-app-purchase - 我的“订阅”应用内购买每次都会被取消。如何让我的订阅自动更新?
- android-security - Google Play 拒绝应用违反我们的恶意行为或用户数据政策
- scala - 在扩展黑盒的类中使用凿子中的 CustomBundle 模板
- postgresql - PostGIS 将地理列上的 st_dwithin 转换为 && 而不保留自定义空间参考系统
- r - 从具有多个配对数据集的行中重新组织数据 R
- statistics - 关于贝叶斯概率符号的问题
- pine-script - 结合两个面临缩放问题的内置 pine 脚本指标
- azure - 如何从 API Azure DevOps 获取测试步骤操作/预期结果描述