在另一个私有类中创建私有类的新实例
本文关键字:实例 新实例 创建 另一个 | 更新日期: 2023-09-27 18:00:29
是否可以在另一个私有类中创建私有类的实例?(在main()程序中不计算在内。)此外,私有类中的方法是否可能返回私有类型对象?
这个问题的产生是因为我在关注PluralSight的Scott Allen关于C#基础与C#5。在关于类和对象的第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?
是否可以在另一个私有类中创建私有类的实例?
仅当要为其创建实例的私有类在要创建实例的专用类内声明时。如果它们没有嵌套,这是不可能的。
私有类中的方法是否可能返回私有类型对象?
是的,可以。
这里有一些代码显示所有内容:
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();
}
}
否。其他文件中的另一个类无法访问私有类。原因是修饰符private旨在将数据或方法封装在该类内部。如果要从未嵌套的其他类访问类,则应使用public或internal修饰符。如果它是嵌套的,也可以使用受保护的修饰符。
不确定你到底在想什么,但这里有一个可能的例子:
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;
}
}
}
}