我有一个问题,我一直在寻找答案但尚未发现任何问题。这让我觉得我在搜索时没有正确地提出问题,所以我会提前为自己的困惑和缺乏知识而道歉。
我正在尝试确定它是否可行,如果可能,我将如何构造类以便属性附加其他自定义方法。如果感觉像是阶级的层次结构,就像我目前所做的那样非常平坦。这是一个非常简单的类和我尝试执行的例子:
更新
namespace Test
{
public class MyClass
{
public string Value
{
get; set;
}
// HOW DO I CREATE 'AddRepetitiveCharacter(string Character, int Index)' for the 'Value' property?
}
static class Program
{
static void Main()
{
MyClass myclass = new MyClass();
Label1.Text = myclass.Value.AddRepetitiveCharacter("-", 3);
}
}
}
如何获取Value属性并向其添加其他方法层,以便我可以对该属性执行其他操作?这可能吗?我注意到有了一个结构,比如DateTime,我可以做一个Datetime.Now ..我希望和我的班级做类似的事情......如果可能的话...我可以做的更传统:
Label1.Text = AddRepetitiveCharacter(myclass.Value,"-",3);
答案 0 :(得分:2)
DateTime.Now
是一个静态属性,它返回自己的struct的实例:
public struct DateTime
{
public static DateTime Now
{
get {
return /* */;
}
}
public DateTime AddDays(int days)
{
}
/* All other members of DateTime struct */
}
由于属性类型是DateTime
struct,它可以包含任何可以包含结构的成员。
同时,您的Exists
会返回原始bool
,但不能包含任何内容。
您可以让您的方法返回其他内容,例如自定义类或集合,以使其工作。
namespace Test
{
public class ExistsClass
{
public bool Result { get; set; } = true;
public int GetTotalCount()
{
return Result ? 1 : 0;
}
}
public class MyClass
{
public ExistsClass Exists { get; set; } = new ExistsClass();
}
static class Program
{
static void Main()
{
MyClass myclass = new MyClass();
Console.WriteLine(myclass.Exists.GetTotalCount());
}
}
}
此代码段现在将输出1,因为默认情况下Result
为真。
非常重要的注意事项:只有在架构,型号和逻辑方面确实有意义时才应该 。
例如,方法Exists
拥有GetTotalCount
方法听起来完全错误。存在的布尔事实(是/否)如何具有count属性?
在您string
和AddRepetitiveCharacter
的示例中,听起来您不想要,也不需要自己的课程。您希望此属性为string
,但具有一些扩展功能。这就是为什么我们有扩展方法 - 它允许你编写方法,它将扩展任何本机或你的自定义类的功能,并像类成员一样使用它:
public static class MyStringExtensions
{
public static string AddRepetitiveCharacter(this string originalString, char c, int count)
{
return originalString + new String(c, count);
}
}
然后,您将能够在项目的任何地方使用以下方式:
MyClass myclass = new MyClass();
// both are working and equivalent:
Label1.Text = myclass.Value.AddRepetitiveCharacter('-', 3);
Label1.Text = MyStringExtensions.AddRepetitiveCharacter(myclass.Value, '-', 3);
或只是
string text = "abc";
// both are working and equivalent:
Console.WriteLine(text.AddRepetitiveCharacter('-', 3)); // abc---
Console.WriteLine(MyStringExtensions.AddRepetitiveCharacter(text, '-', 3)); // abc---
请注意以下事项:
this