我有一个内部类,内部构造函数不允许它在泛型集合中使用,所以我将其更改为public.如果在内部类中有公共构造函数,那么可访问性是什么?与内部构造函数有什么不同?
Dan*_*Tao 49
两者基本相同.我看到用于区分它们的一个参数是,使构造函数internal确保类型只能由当前程序集中的类型实例化,即使稍后确定类型本身应该public代替internal.换句话说,您可以决定更改类型的可见性,而不会限制其实例化.
使构造函数public具有相反的效果(显然),如果您希望可以在任何可见的地方实例化类型,那么它可能是明智的.
此外,正如您已经指出的那样,一个小的区别是,如果构造函数的internal类型不能用作具有where T : new()约束的泛型类型的泛型类型参数,因为此约束需要构造函数public.
Oza*_*zan 14
如果从公共函数返回该类的对象,则外部代码仍然可以使用具有内部构造函数的公共类.
然后外部代码可以访问该对象,但仍然无法创建新对象.
Assembly 1:
public class Exclusive
{
internal Exclusive() {}
public void DoSomething() {}
}
public class Factory
{
public Exclusive GetExclusive() { return new Exclusive(); }
}
Assembly 2:
Factory MyFactory = new Factory();
Exclusive MyExclusive = MyFactory.GetExclusive(); // Object is created in Assembly 1
MyExclusive.DoSomething();
Exclusive MyExclusive = new Exclusive(); // Error: constructor is internal
Run Code Online (Sandbox Code Playgroud)
而内部类根本不能在程序集之外使用:
Assembly 1:
internal class Exclusive
{
public Exclusive() {}
public void DoSomething() {}
}
public class Factory
{
public Exclusive GetExclusive() { return new Exclusive(); }
}
Assembly 2:
Factory MyFactory = new Factory();
Exclusive MyExclusive = MyFactory.GetExclusive(); // Error: class Exclusive not found
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21088 次 |
| 最近记录: |