C# 在列表中存储实例<;列表<;T>>;-不一致的可访问性
我仍在开发臭名昭著的虚拟快餐店控制台应用程序。我有很多代表不同食物的类。这些食物将储存在不同的C# 在列表中存储实例<;列表<;T>>;-不一致的可访问性,c#,oop,C#,Oop,我仍在开发臭名昭著的虚拟快餐店控制台应用程序。我有很多代表不同食物的类。这些食物将储存在不同的菜单中,在我创建菜单上的食物后,我必须将其呈现给用户。用户将选择项目,然后这些项目的成本将添加到类Order的实例中,其中OrderTotal()方法将计算所选每个项目的最终成本,并且在通过在SelectPayment(付款)中选择贷方或借方处理付款后和处理付款(付款付款)方法。在这个片段中,我正在研究薯条。与汉堡包不同的是,只有一种法国风味,那就是我们家的薯条。因此,它不是List,而是List,因为
菜单中
,在我创建菜单上的食物后,我必须将其呈现给用户。用户将选择项目,然后这些项目的成本将添加到类Order
的实例中,其中OrderTotal()
方法将计算所选每个项目的最终成本,并且在通过在SelectPayment(付款)中选择贷方或借方处理付款后
和处理付款(付款付款)
方法。在这个片段中,我正在研究薯条。与汉堡包不同的是,只有一种法国风味,那就是我们家的薯条。因此,它不是List
,而是List
,因为薯条的一个实例不会改变,但用户将能够选择一组enum
值,这将指示如何继续制作大、中、含盐的薯条。所以要点是,在Program.cs中,能够frenchfrees.Add(*fries*)
然后它将添加到薯条的私人列表中
我的薯条类中
同样适用于鸡肉汉堡和任何其他需要添加到菜单中并呈现给用户的食品。Visual Studio错误是不一致的可访问性:参数类型:“DPBurgers.Fries”的可访问性不如方法“DPBurgers.Menu.AddFries(DPBurgers.Fries)”
那么这是我试图将它们添加到私有列表的方式的问题吗?还是参数有问题
主程序文件的内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
///<summary>
///Simple C# program that allows a user to browse a menu
/// at a fast food restraunt and then make selections on what
/// to eat based on those choices. This program is designed to
/// excersize the basics of C# fundamentals.
/// Data access will be class based. No Databases or serialized formats
/// will be used.
/// </summary>
namespace DPBurgers
{
class Program
{
static void Main(string[] args)
{
string filler = "*****************";
Console.WriteLine("DPBURGERS..\nDerek Pauley..\n{0}", DateTime.Now);
Console.WriteLine(filler);
Console.WriteLine(filler);
Console.WriteLine("Welcome To DP Burgers. Please review our menu and let me know when you're ready to order by typing 'Ready'. ");
Console.WriteLine(filler);
//List of our burgers.
var burger1 = new Burger
{
Name = "Double Decker",
Price = 5.00m,
};
var burger2 = new Burger
{
Name = "Single Stack",
Price = 3.00m,
};
var burger3 = new Burger
{
Name = "Veggie Burger",
Price = 2.00m,
};
var kidsBurger = new Burger
{
Name = "Kiddie Burger",
Price = 1.00m,
};
var valueBurger = new Burger
{
Name = "DPValue Burger",
Price = 1.00m,
};
//List of our chicken sandwiches
var DpHouseChickenSandwich = new Chicken();
DpHouseChickenSandwich.Name = "House Chicken Sandwich";
DpHouseChickenSandwich.Price = 5.00m;
var answer = Console.ReadLine();
if (answer == "yes")
{
DpHouseChickenSandwich.SelectChickenCook();
}
//Only one kind of fries - House Fries
var FrenchFries = new Fries();
FrenchFries.Name = "House Fries";
List<Burger> DpBurgerMenu = new List<Burger>();
DpBurgerMenu.Add(burger1);
DpBurgerMenu.Add(burger2);
DpBurgerMenu.Add(burger3);
List<Burger> DpAdditionalBurgers = new List<Burger>();
DpAdditionalBurgers.Add(kidsBurger);
DpAdditionalBurgers.Add(valueBurger);
Menu DPBurgerMainMenu = new Menu();
DPBurgerMainMenu.Add(DpBurgerMenu);
DPBurgerMainMenu.Add(DpAdditionalBurgers);
Menu DPFries = new Menu();
DPFries.AddFries(FrenchFries);
{
}
}
}
}
//if user orders fries then use selectSize method
错误告诉您问题:可访问性不一致:参数类型:“DPBurgers.Fries”的可访问性不如方法“DPBurgers.Menu.AddFries(DPBurgers.Fries)”
您有一个名为AddFries
的函数,它是公共的,但它将一个非公共的类型作为参数,因此您可能会遇到这样一种情况:某些东西可以调用该方法,但无法知道要发送给该方法的参数的类型。使发送的函数定义和类具有相同的可见性(public/private/internal…以对您有意义的为准),这将消除此错误
(还请注意,没有在类上指定可见性修饰符,默认为内部)
因此,快速解决方法是要么将方法更改为内部而不是公共,要么将类更改为公共。由于您没有发布菜单的代码,我假设菜单。AddFries
标记为公共
,但用作参数的Fries
类没有。默认情况下,类是内部的
,除非指定它们是公共的
。只需将您的薯条
课程公开
:
public class Fries : Food
请注意,食品
也需要公开。错误会泄露:
可访问性不一致:参数类型:“DPBurgers.Fries”的可访问性不如方法“DPBurgers.Menu.AddFries(DPBurgers.Fries)”
您的问题是不同类的可访问性。您有一个接受不易访问的参数的公共类。Ie:受保护,内部或私有
当不指定可访问性修饰符时,假定内部
:类薯条:食品
。把它改成公共类薯条:食物,一切都会好的
OO:您可以将基类公开,并使不同的派生类不易访问(无论出于何种原因),只要您的参数始终期望基类,它就会工作。此外,请忽略random if语句,该语句仅用于测试chicken类中方法的初始函数,我没有列出它。在运行时,它实际上不会出现在那里。我应该减少主程序文件的代码大小,并显示Fries的实例化。看起来您的菜单类是公共的,但Fries没有访问修饰符,因此默认为内部。让菜单内部或薯条公开应该可以解决您的错误。实际上,internal
是非嵌套类的默认设置,而不是private
啊,谢谢提醒。因为非嵌套的私有类不是很有用,所以它也更有意义:)
public class Fries : Food