是否可以在另一个私有类中创建私有类的实例? (不计入main()程序。) 而且,私有类中的方法是否可以返回私有类型对象?
这个问题的出现是因为我在C#5的C#Fundamentals上关注了PluralSight的Scott Allen。关于类和对象的第2课,他有一个代码示例:
public GradeStatistics ComputeStatistics()
{
GradeStatistics stats = new GradeStatistics();
...
...
}
GradeStatistics在单独的类文件中定义,如:
class GradeStatisticss
{
}
内联评论:我不是在讨论嵌套类。我的意思是,你有两个类(单独的文件),我想知道一个类是否可以创建另一个类的实例(知道它们都是私有的)。
Edited with examples:
private class Example1
{
}
private class Example2
{
public Example1 DoSomeComputation()
{
return new Example1();
}
}
private class Example3
{
Example1 ex1 = new Example1();
}
Is Example3 able to create ex1? Can Example2 return a new instance of Example1?
答案 0 :(得分:1)
是否可以在另一个私有类中创建私有类的实例?
仅当要在其中创建实例的私有类声明要创建实例的私有类时。如果它们没有嵌套,则无法实现。
私有类中的方法是否可以返回私有类型对象?
是的,它可以。
以下是一些显示所有内容的代码:
public class Tester {
private class ThePrivateCreator {
private class TheOtherPrivateClass {
}
public Object createObject() {
return new TheOtherPrivateClass();
}
}
public void canWeDoThis() {
ThePrivateCreator c = new ThePrivateCreator();
Console.WriteLine(c.createObject());
}
}
class Program
{
public static void Main(string[] args) {
Tester t = new Tester();
t.canWeDoThis();
}
}
答案 1 :(得分:1)
没有。另一个类在另一个文件中无法访问私有类。原因是修饰符private是为了将数据或方法封装在该类中。如果要从不嵌套的其他类访问类,则应使用public或internal修饰符。如果它是嵌套的,您也可以使用protected修饰符。
答案 2 :(得分:0)
不确定你的想法,但这是一个可能的例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication26
{
class Program
{
static void Main(string[] args)
{
private1 p1 = new private1();
private2 p2 = p1.foo();
Console.WriteLine(p2.Value);
Console.ReadLine();
}
private class private1
{
public private2 foo()
{
private2 p2 = new private2("I was created inside a different private class!");
return p2;
}
}
private class private2
{
private string _value;
public string Value
{
get { return _value; }
}
public private2(string value)
{
this._value = value;
}
}
}
}