Here's something else with attributes:

class Program
{
static void Main(string[] args)
{
 Data d1 = new Data();
 d1.FirstName = "Ron";
 d1.LastName = "Young";

 Data d2 = new Data();
 d2.FullName = d1.FullName;
 d2.FirstName = "Craig";

 Console.WriteLine(d1.FullName);
 Console.WriteLine(d2.FullName);
}
}

class Data
{
private char[] namebuffer = new char[20];

[Length(20), Offset(0)]
public string FullName { get { return ReadBuffer("FullName"); } set {
SetBuffer("FullName", value); } }

[Length(10), Offset(0)]
public string FirstName { get { return ReadBuffer("FirstName"); } set {
SetBuffer("FirstName", value); } }

[Length(10), Offset(9)]
public string LastName { get { return ReadBuffer("LastName"); } set {
SetBuffer("LastName", value); } }

public Data()
{
 for (int i = 0; i < namebuffer.Length; i++)
 {
  namebuffer[i] = ' ';
 }
}

private int GetLength(string fieldName)
{
 PropertyInfo prop = this.GetType().GetProperty(fieldName);
 LengthAttribute lengthAttribute =
(LengthAttribute)prop.GetCustomAttributes(typeof(LengthAttribute),
false)[0];

 return lengthAttribute.Length;
}

private int GetOffset(string fieldName)
{
 PropertyInfo prop = this.GetType().GetProperty(fieldName);
 OffsetAttribute offsetAttribute =
(OffsetAttribute)prop.GetCustomAttributes(typeof(OffsetAttribute),
false)[0];

 return offsetAttribute.Offset;
}

private string ReadBuffer(string fieldName)
{
 int length = GetLength(fieldName);
 int offset = GetOffset(fieldName);

 char[] buffer = new char[length];

 for (int i = 0; i < length; i++)
 {
  buffer[i] = namebuffer[offset];
  offset++;
 }

 return new string(buffer);
}

private void SetBuffer(string fieldName, string value)
{
 int offset = GetOffset(fieldName);

 for (int i = 0; i < value.Length; i++)
 {
  namebuffer[offset] = value[i];
  offset++;
 }
}
}

class LengthAttribute : Attribute
{
private int length;

public int Length { get { return length; } }

public LengthAttribute(int length)
{
 this.length = length;
}
}

class OffsetAttribute : Attribute
{
private int offset;

public int Offset { get { return offset; } }

public OffsetAttribute(int offset)
{
 this.offset = offset;
}
}

----- Original Message -----
From: "Jon Rothlander" <[EMAIL PROTECTED]>
To: <ADVANCED-DOTNET@DISCUSS.DEVELOP.COM>
Sent: Monday, November 13, 2006 9:21 PM
Subject: [ADVANCED-DOTNET] Data Structures in .Net?


I'm working on something that is common in other languages, but something
that .Net doesn't seem to support, at least it's not common enough for me
to
search the Internet for it or find it in any books.  What I am trying to
do
is actually simple...

Let's say that you have the following data...

First Name (20)
Last Name (20)
Middle Name (20)
Area Code (3)
Delimiter2 (1)
Phone_Prefix (3)
Delimiter2 (1)
Phone_Suffix (4)

That data might look like...

Jon                  Rothlander          Gregory          123-123-1234

What I want to do is to create the following variables....

Name_First
Name_Last
Name_Middle
Phone_AreaCode
Phone_Del1
Phone_Pre
Phone_Del2
Phone_Suf

But I also want to create the following variables as well...

Name_Full
Phone_Full

What I cannot figure out is how to do something like...

Name_Full = "Jon                  Rothlander          Gregory          "
Phone_Full = "123-123-1234"

Then have the values in the other varibles get filled without having to
code
lots of Mid() string commands.

In other lanugauges like C, RPG, COBOL, and other, you can declare a
variable that points to a given set of memory.  Then you can declare other
variables to point that that same memory.  Then when you update one
variables, all the other variables that also point to that memory are
automatically update as well.  That's what I'm trying to do.

If you could do this in .Net like you could in COBOL or RPG, you would do
something like...

Dim Name_Full as String       Length(60) Start(1)  End(60)
Dim Name_First as String        Length(20) Start(1)  End(20)
Dim Name_Last as String         Length(20) Start(21) End(40)
Dim Name_Middle as String     Length(20) Start(41) End(60)

What you are able to do here is to tell the compiler that Name_Full starts
at position 1 and goes to position 60.  Name_First starts at 1 and goes to
20.  When you move a value into Name_First, the memory is updated and both
Name_Full and Name_First are updated because they point to the same memory
location.

Is there something like this available in .Net?  I have been told that
there
is, but no one has been able to provide me a sample.

I know that I can go in and build a class to control this.  I have done
that
and it works.  The problem is that it's way to much work.  I want to find
something a little less complex.  When I built a class to support this, I
was able to create the variables as properties over a local property that
stores the full set of data.  Then each property pulls out a given
Mid(x,y)
value based on the definition of the variable.  This does work, but it's a
major pain.  I have been told that .Net does support some various ways to
have multiple variables point at the same memory location.

Any ideas how .Net supports that?  I'm not sure where to start looking.

Best regards,
Jon

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at
http://discuss.develop.com


===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to