【发布时间】:2011-08-25 09:14:16
【问题描述】:
我刚刚遇到了一个未知的 c# 概念。 谁能告诉我内部设置属性的目的是什么? 它的用途是什么? 我知道 internal 关键字用于在程序集中工作。
【问题讨论】:
标签: c#
我刚刚遇到了一个未知的 c# 概念。 谁能告诉我内部设置属性的目的是什么? 它的用途是什么? 我知道 internal 关键字用于在程序集中工作。
【问题讨论】:
标签: c#
如果您有一个带有内部 set 访问器(和公共 get 访问器)的属性,则意味着程序集中的代码可以读取(获取)和写入(设置)该属性,但其他代码只能读取它。
您可以通过阅读internal access modifier、public access modifier 和properties 来获得上述信息。
此外,您还可以阅读Restricting Accessor Accessibility。
【讨论】:
Internal 在理论上似乎是一个不错的概念,因为它支持封装,但在实践中,如果您必须在您不拥有的程序集中扩展某些内容,它将破坏继承。
假设您正在设计一个供其他程序员使用的 API。在此 API 中,您有一个对象 Foo,它具有属性 Bar。您不希望其他程序员在引用您的程序集时设置 Bar 的值,但您需要自己在 API 中设置该值。只需像这样声明属性:
public class Foo
{
public string Bar { get; internal set; }
}
【讨论】:
在 C# 2.0 中,您可以设置 get 和 set 的可访问性。
下面的代码显示了如何使用内部集和公共获取来创建私有变量。 Hour 属性现在只能从同一模块 (dll) 中的代码设置,但所有使用包含该类的模块 (dll) 的代码都可以访问。
// private member variables
private int hour;
// create a property
public int Hour
{
get { return hour; }
internal set { hour = value; }
}
【讨论】:
如果使用内部访问修饰符标记属性设置器,则只有位于程序集中的类才能设置该属性。
public string MyProperty { get; internal set; }
【讨论】:
给定一个声明为public string MyString {get; internal set;} 的属性,这意味着
public string MyString)internal set;)【讨论】:
这意味着该属性只能由与删除该属性的类位于同一程序集中的代码设置。
【讨论】:
它是一种结构,它允许仅由同一程序集中的代码设置属性的值。
【讨论】:
它主要与构造函数一起使用,例如
public class CustomerConfig
{
public string CustomerName { get; internal set; }
public CustomerConfig(string customerName)
{
this.CustomerName = customerName;
}
}
通过这种方式,您可以预设一些参数,并使它们对代码中的其他程序集只读。
【讨论】: