how to pass value to this constructor ?
-
Saturday, March 03, 2012 2:38 AM
I am sorry for my question is a little theoretical
I am new to OOP and studying the following code.
public interface IShape { double getArea(); } public class Rectangle : IShape { int lenght; int width; public double getArea() { return lenght * width; } } public class Circle : IShape { int radius; public double getArea() { return (radius * radius) * (22 / 7); } } public class SwimmingPool { IShape innerShape; IShape outerShape; SwimmingPool(IShape _innerShape, IShape _outerShape) { this.innerShape = innerShape; this.outerShape = outerShape; } public double GetRequiredArea() { return outerShape.getArea() - innerShape.getArea(); } }
This code calculate area of different shapes. I can see constructor of SwimingPool class but I am not getting how to pass values to constructor. I have not done programming using Interfaces before. Please guide me 3 things:- How to pass values on design time to constructor as its type is an Interface and not a class ?
- How to pass values on run time (when both parameters can be of any type) ?
- How to do validations here in OO way ?
Thanks for your time and help.
- Edited by Haansi Saturday, March 03, 2012 2:39 AM
- Edited by Haansi Saturday, March 03, 2012 2:43 AM
- Changed Type Bob ShenMicrosoft Contingent Staff Thursday, March 15, 2012 2:25 AM
- Moved by Rudedog2MVP Monday, April 30, 2012 6:02 PM : off topic thread : (From:Visual C# General)
All Replies
-
Saturday, March 03, 2012 3:11 AMI am not sure what you mean by calling this constructor at design time. It is not a component/control.Assuming away some typing mistakes, such as the constructor being private, you call the constructor as an example, like this:SwimmingPool sp = new SwimmingPool(new Circle(), new Circle());So long as the objects passed can be converted to an IShape, then the object can be passed. Circle (and Rectangle) can be passed for either item.--
Mike -
Saturday, March 03, 2012 3:21 AM
Thanks Mike,
We will need to instantiate IShape vailable as:
IShape inner=new Circle(); // instancitaion on code/ desing time
IShape outer=new Rectangle(); // instancitaion on code/ desing time
If we coded these lines it will be on design time. What if we need to instantiate it on run time where we will not know what type inner and outer will be ? Please guide how to handle it.
Is there an OO concept Polymorphism that can be used here ?
Kindly can you reply my 3 questions point to point ?
thanks
Thanks
- Edited by Haansi Saturday, March 03, 2012 3:22 AM
-
Saturday, March 03, 2012 3:26 AM
-
Saturday, March 03, 2012 8:32 PM
I would agree with Mike.
Knowing the type of the class implementing the interface is irrelevant. In fact, it is supposed to be a don't care condition. All that the constructor is looking for is a type that implements the interface. It doesn't really need to know, or even care, what the type is that implements the interface.
I do want to point out that your implementing classes calculate an integer value for Area, and an implicit cast is made to type double on the return value.
Rudy =8^D
Mark the best replies as answers. "Fooling computers since 1971."
http://thesharpercoder.blogspot.com/
- Edited by Rudedog2MVP Saturday, March 03, 2012 8:34 PM
-
Saturday, March 03, 2012 11:24 PM
Thanks Rudy,
Can you please answer:
- How to pass values on design time to constructor as its type is an Interface and not a class ?
- How to pass values on run time (when both parameters can be of any type) ?
- How to do validations here in OO way ?
-
Sunday, March 04, 2012 6:36 AM
You saw examples of people doing it. Rectangle and Circle are IShapes, so instances of Rectangle and Circle satisfy the need to be an IShape being passed in.
What type of validations are you thinking of?
-
Sunday, March 04, 2012 12:47 PMYou have simply repeated your original questions. I believe 1 and 2 are well answered at this point. I too was unsure about validation in your question 3. It seemed to me "validation" mean confirming that the class recieved "IShape" objects.Perhaps, your validation issue is the following. If the user passes in an inner circle shape of radius 5m, and an outter rectangle shape of size 3m by 4m, then clearly the outer shape cannot contain the inner shape. Is that your validation question?If I have understood to some degree your validation issue, then there is a problem in your architecture. To determine if shape a can contain shape b, you need to know the type of shape (circle, rectange, triangle etc.) Knowing the IShape interface is not sufficient.
--
Mike -
Sunday, March 04, 2012 1:15 PM
Hi,
1.How to pass values on design time to constructor as its type is an Interface and not a class ? and
2. How to pass values on run time (when both parameters can be of any type) ?
- I don't know what do you understand with design time but how to pass parameters to this 'swimmingPool' constructor is achieved in this way:
Circle c = new Circle(); //tip: you should add a constructor that takes the radius as input parameter Rectangle r = new Rectangle(); // tip: you should add a constructor that takes length and width as input parameters SwimmingPool sp = new SwimmingPool(c,r);
- for assigning values to the circle or Rectangle class you can expose your declarations of private members as properties or to keep it private add it simple as parameters on the specified class constructor ex. Circle c = new Circle(3); // 3 = radius
3. How to do validations here in OO way ?
- It's pretty simple to make validations if you just know what to validate :P... for ex.
int radius; public double getArea() {
//sample validation: if radius is negative value just assign the value of 1
if(radius < 0) radius = 1; return (radius * radius) * (22 / 7); }
hope it helps :)
If some code doesn't work, don't worry help is on the way.. don't forget to mark your thread as solved when done...
- Edited by Muli_352 Sunday, March 04, 2012 1:17 PM misstypings :)
-
Sunday, March 04, 2012 1:23 PMI take back a bit of what I wrote. It may ot be that the architecture is "a problem", but rather that it needs extension. For example, if I understood your validation issue, that IShape a can indeed contain IShape b, then perhaps IShape needs to provide a contract for a contain function, defined as follows:public bool Contains (IShape othershape);You then need the circle class and rectangle class to be able to define these functions appropriately.
--
Mike -
Sunday, March 04, 2012 1:32 PM
Hi Haansi,
First of all, I would make the constructor public. As the constructor is now defined in your code, it is private and not of much help. Then, I would refactor the inner/outer shape fields to public properties, so as to do propper validation in their respective setters (passing the IShape arguments in the constructor would only be a syntactic shortcut). Since getArea() when applied to an instance always returns the same value, I also would refactor this method to a property. If you want to restrict the concrete (runtime-)type of IShape that can be passed to the constructor, I would validate this by using _innerShape.GetType(). If the test fails, throw an ArgumentException. This test can also be done in the setters. Also: Using generics would be an alternative option, since you always can restrict T to be of type IShape etc.
Note: You have some typos in your code, e.g. the line this.innerShape = innerShape should read: this.innerShape = _innerShape;
Marcel- Edited by Marcel RomaMicrosoft Community Contributor Sunday, March 04, 2012 1:35 PM Note
-
Sunday, March 04, 2012 3:09 PM
Thanks Rudy,
Can you please answer:
- How to pass values on design time to constructor as its type is an Interface and not a class ?
- How to pass values on run time (when both parameters can be of any type) ?
- How to do validations here in OO way ?
Most of your questions have been answered with code example. The C# Compiler enforces type safety. So if it compiles, then your code is type safe.
1. Pass an object instance of a class that implements the interface. Compiler checks for type safety.
2. If your method signature uses type System.Object, then you can pass any type to it. Your method will be blind to the type that it is being passed. We use interfaces as type parameters to allow you define the behavior of the type passed to the method. This allows you to pass "any type" to the method, which implements the interface.
3. Validations? On type? You could use Reflection to determine the type of an object, which can extremely time consuming. More times than not, a desire to examine type means one of two things. One, your code is not well written. Two, it is a sign that your code could be more efficient if it used Generics.
private static void DetermineType(IDisposable obj) { Type objType = obj.GetType(); // returns type of implementing class of 'obj' }
Hope this helps.
Rudy =8^D
Mark the best replies as answers. "Fooling computers since 1971."
http://thesharpercoder.blogspot.com/
- Edited by Rudedog2MVP Sunday, March 04, 2012 3:14 PM
-
Sunday, March 04, 2012 3:44 PM
One, your code is not well written.
No. The code is buggy, it simply would not compile.
Before even thinking of object orientation, the basic things should be considered and learned first. As long as one cannot instantiate an IShape directly (by newing it), is should be pretty obvious that the type must have a concrete runtime type which can easily be checked (didn't I mention GetType() already?). BTW: In future it will be possible for interfaces to offer default methods without the need of a class implementing the interface, but this is a future scenario, not yet supported.
Marcel -
Sunday, March 04, 2012 4:21 PMI suspect the code was retyped, rather than copied into the post...As to interfaces offering method code, I do not know specifically what you are describing. This "sounds" like an abstract class, which has always been allowable. I would see no reason for enabling interfaces to act as an abstract class.
--
Mike -
Sunday, March 04, 2012 5:52 PM
Hi Mike,
Let me clarify this: I'm not talking about an existing thing, but about an innovation that could make it through in a future version of the language. There were some very inciting hints from Vance Morrison in this respect in the past, but as for now AFAIK it's still a future thing.
As it is now, you can't add a new method to an existing interface, because an interface is merely a contract. And this would potentially break implementors who no nothing about the new method on the interface. Yet, there is a valid, substantial need for adding methods on an interface, for extending it (without deriving).
And the interesting fact is: it is all technically doable (interfaces are implemented as classes). All there is to do, is to allow for a default implementation of the new interface method. If older implementor do not have the implementation, the default one would get used.
The difference between an interface and an abstract class is that interfaces have multiple inheritance, abstract classes do not. Because of this, interfaces are so good for contracts (as they don't have state).
Marcel
-
Sunday, March 04, 2012 6:05 PM
-
Sunday, March 04, 2012 6:30 PM
Mike,
It's pretty obvious: You can't inherit from multiple abstract base classes, but you can from multiple interfaces. If you were to implement the contract by using abstract base classes, you would get a problem as soon as you needed to extend the contract. If we however would implement the contract by interfaces that support default implementations (future scenario), we would get the best of the two worlds: multiple inheritance *and* default functionality. Now that would be great!
The relation to the current topic is on hand: At the current moment, interfaces do not provide their own implementations. As simple contracts, it is uppon their implementors to provide flesh to the skeleton. Because of this, the concrete type of the implementor is currently always known at runtime. Sorry if the divagation into the realm of the future distracted from that.
Marcel
-
Sunday, March 04, 2012 6:46 PM
I think this thread is out of topic...
Haansi did you get your answer?
If some code doesn't work, don't worry help is on the way.. don't forget to mark your thread as solved when done...
-
Monday, March 05, 2012 9:04 AM
interfaces are implemented as classes
No they aren't.
All there is to do, is to allow for a default implementation of the new interface method.
And what if two interfaces define the same method with a default implementation? There is a reason multiple inheritance is not supported by .NET.
The difference between an interface and an abstract class is that interfaces have multiple inheritance, abstract classes do not.
Just a terminology point here: classes inherit from classes, interfaces inherit from interfaces, classes implement interfaces. Classes don't inherit anything from interfaces: they are not provided something, they are forced to provide it.
-
Monday, March 05, 2012 9:30 AM
Louis,
We're divagating again from the topic of the thread.
But because this seems to be of interest for you:No they aren't.
Here's the IL-definition of a sample interface.
Note the first word. See what I meant?.class public interface abstract auto ansi IPerson { .property instance string FirstName { .get instance string ConsoleApplication67.IPerson::get_FirstName() .set instance void ConsoleApplication67.IPerson::set_FirstName(string) } .property instance string LastName { .get instance string ConsoleApplication67.IPerson::get_LastName() .set instance void ConsoleApplication67.IPerson::set_LastName(string) } }
And what if two interfaces define the same method with a default implementation? - There is a reason multiple inheritance is not supported by .NET
Who says that multiple inheritance is not supported by .NET? - You can implement the functionality provided by multiple inheritance (without the default implementations) by using how many interfaces you want.
One of the big obstacles in front of multiple inheritance in .NET is state management. Abstract classes do have state, interfaces have none. If multiple inheritance was possible with abstract classes, you would get the situation where multiple classes implement the same state, say two fields named "Name". Now, which of the two would/should be used in the derived class?
With interfaces, explicitly implemented, you could easily differentiate between IPerson.Name and IEmployee.Name, or between default methods. A default implementation of a method, would not imply shared state, so there is no real technical impediment to giving interfaces default method implementations.I'll leave the terminology question uncommented. You're obviously following the main-stream school, while I was talking about a possible innovation on interfaces.
Hope this helps. If you need more information, please open a new discussion thread.
Marcel
- Edited by Marcel RomaMicrosoft Community Contributor Monday, March 05, 2012 9:40 AM
-
Monday, March 05, 2012 1:38 PM
We're divagating again from the topic of the thread.
But because this seems to be of interest for you:Sorry. I've been made ticklish about interfaces because of one particular guy.
From the CLI specification (Partition II, Chapter 10): "For historical reasons, many of the syntactic categories used for defining types incorrectly use “class” instead of “type” in their name. All classes are types, but “types” is a broader term encompassing value types, and interfaces as well."
-
Thursday, March 08, 2012 1:36 PM
As you've been doing since a long time.
Could you be clearer? What have I been doing? Are you going to state that interfaces are classes now? J'en ai rien à carrer de tes opinions.
-
Thursday, March 08, 2012 1:39 PM
1. Pass an object instance of a class that implements the interface. Compiler checks for type safety.
Not always.
It's right that type safety is not guaranteed if you cast to the interface type. It is however guaranteed if you do not cast.
-
Thursday, March 08, 2012 2:33 PM
It will always check for type safety. If the value is casted it will be much more lax in it's checking, and may end up not throwing an error even though it doesn't think that it will work. That doesn't mean it didn't check though.1. Pass an object instance of a class that implements the interface. Compiler checks for type safety.
Not always.
It's right that type safety is not guaranteed if you cast to the interface type. It is however guaranteed if you do not cast.
-
Thursday, March 08, 2012 3:19 PM
It will always check for type safety. If the value is casted it will be much more lax in it's checking, and may end up not throwing an error even though it doesn't think that it will work. That doesn't mean it didn't check though.1. Pass an object instance of a class that implements the interface. Compiler checks for type safety.
Not always.
It's right that type safety is not guaranteed if you cast to the interface type. It is however guaranteed if you do not cast.
Yes, the compiler can detect that the object cannot possibly implement the interface if its class is sealed. At the moment, I can't think of other cases were the compiler can check anything. -
Wednesday, April 25, 2012 1:18 PM
1. Pass an object instance of a class that implements the interface. Compiler checks for type safety.
Not always. Suppose
circimplementsIShape:SwimmingPool s = new SwimmingPool(circ, (IShape)noshape); // ctor must be public/internal
The code above always compiles successfully, even if
noshapedoes not implementIShape.
The compiler always checks for type safety. It cannot check for the late binding, which the compiler allows, being performed in your code snippet.
Your code snippet compiles successfully because the compiler checked the type passed into the c'tor and found it to be of type IShape. As you well know, the compiler cannot attempt to perform the actual cast. It allows the code to compile because it knows that there is the distinct possibility that the instance [not the type used in the source code] being cast could define the interface when the actual code is executed.
The original question did not involve casting of objects. You have dramatically changed the boundary conditions of the original problem. Your conclusions would be misleading to new developers, and therefore do not apply to the original question. Your arguments are entirely off-topic.
Rudy =8^D
Mark the best replies as answers. "Fooling computers since 1971."
-
Saturday, April 28, 2012 1:31 AM
Hi. Isn't this more of a question than a discussion? Kindly consider starting a question rather than a discussion next time you want an answer to a programming problem. Also, you will get answers to your question more quickly.
Best regards,
Nevin Janzen (Visit my Website)
If this post answers your question, please click Propose As Answer. If this post is helpful, please click Vote As Helpful. -
Sunday, April 29, 2012 6:30 PM
SwimmingPool s = new SwimmingPool(circ, (IShape)noshape);
Your "solution" is no solution at all. It is confusion. Your "solution" is a repackaging of the OP's original problem. The correct solution is to pass an object that implements the interface IShape. The object 'noshape' does not implement the interface, IShape. Casting the instance to the interface is not the same as implementing the interface. Your 'solution' is designed with the intent to throw an invalid cast exception at runtime. Again, that was the original problem.
Rudy =8^D
Mark the best replies as answers. "Fooling computers since 1971."
-
Monday, April 30, 2012 2:09 AM
@BR.aljodAv, I seriously don't understand your behaviour, stop being so childish and unfriendly.
Most of your posts are self-centered and quotes that contradicts most of the valuable members and professionals of this forum to show that you know better, it's far from giving conclusions that are backed with real facts about the spoken materials in question, in fact, you're currently spamming the forums by linking old posts and quoting posts that are irrelevant to the OP.
Not once you shared your own experience, the only thing that pops in each single post of yours is the C# specification and the word misconception like you know better, almost like you were one of the designers of the language or CLR.
It's a forum not a battlefield, we don't need heroes here, if you want to show off please do that outside to these forums; otherwise, change your attitude and contribute like everyone else.
Eyal (http://shilony.net), Regards.
- Edited by Eyal Shilony Monday, April 30, 2012 2:13 AM
-
Monday, April 30, 2012 2:28 AM
Agreed.
Nevin Janzen (Visit my Website)
If this post answers your question, please click Propose As Answer. If this post is helpful, please click Vote As Helpful.
How to Get Better Answers to Your Questions -
Monday, April 30, 2012 2:34 AM
Let's build build people up instead of tear them down on these forums. Let's support each other and help one another. Let's be friends.
Nevin Janzen (Visit my Website)
If this post answers your question, please click Propose As Answer. If this post is helpful, please click Vote As Helpful.
How to Get Better Answers to Your Questions -
Monday, April 30, 2012 1:20 PM
SwimmingPool s = new SwimmingPool(circ, (IShape)noshape);
Your "solution" is no solution at all. It is confusion. Your "solution" is a repackaging of the OP's original problem. The correct solution is to pass an object that implements the interface IShape. The object 'noshape' does not implement the interface, IShape. Casting the instance to the interface is not the same as implementing the interface. Your 'solution' is designed with the intent to throw an invalid cast exception at runtime. Again, that was the original problem.
Rudy =8^D
Rudy, you're a moderator. You shouldn't be getting involved in flame wars with a forum member clearly violating the rules in almost every single posts he makes. If you weren't a mod I'd tell you to ignore him and let a mod handle it, but since you are one I shouldn't even be telling you that. Delete the inappropriate posts that are clearly harmful to the thread as well as the community at large. If anyone is deserving of a ban, this account is. It should have been banned within a few hours of being created given what it's done and yet it's been over two weeks now. It's one thing when little flames/insults of otherwise helpful contributing members get ignored for days/weeks, but when an account is created for the sole purpose of being abusive and nothing has been done after two weeks it's essentially telling the entire community that this is an unmoderated forum, and that's really not a good message to be sending.
- Edited by servy42Microsoft Community Contributor Monday, April 30, 2012 1:35 PM
-
Monday, April 30, 2012 1:49 PM
Thanks, Servy. I was merely checking to see if this really was the same person, and what type of posts that they will make. I simply pointed out that the person's reply did not answer the question at all. The individual's posted "solution" is actually a repackaging of the original problem, which asked to how to make it work, not how to make it not work.
Rudy =8^D
Mark the best replies as answers. "Fooling computers since 1971."
-
Monday, April 30, 2012 3:02 PM
Thanks, Servy. I was merely checking to see if this really was the same person, and what type of posts that they will make. I simply pointed out that the person's reply did not answer the question at all. The individual's posted "solution" is actually a repackaging of the original problem, which asked to how to make it work, not how to make it not work.
Rudy =8^D
The name is virtually identical, the account was created the day after the other account was banned, the writing style is the same, he's quoted posts from his banned account as if they were his own posts. I have said on several occasions, to him, that it's the same person and he has not bothered to deny it, he is being just as abusive, and in the same way, that the previous account was being abusive before it was banned, and if you can/have checked I'm sure that the IPs will indicate that it's the same person. All of this clearly indicates, with no doubt whatsoever, that this is a ban-evading account. All of this evidence existed within hours of the account being created TWO WEEKS AGO. It should have been banned then. In the weeks sense the account has done more than enough in its own right to warrant a serious ban, even if you couldn't prove it was the same person.
From a moderation point of view this is an easy, clean cut, unambiguous problem that should have been dealt with quickly and efficiently. When the murky, questionable, and debatable problems take a while to be resolved it's understandable, but there's literally not all that much more that this person could do to be a worse poster, and his posts aren't even being deleted, let alone him being banned to stop it from continuing.
Apparently marking posts as answers and merging duplicate threads are a higher priority for the moderation team.
-
Monday, April 30, 2012 3:09 PM
Although @servy42 is being a little aggressive and discriminatory of the moderation team, he does have a few good points and I have to agree with him.
Nevin Janzen (Visit my Website)
If this post answers your question, please click Propose As Answer. If this post is helpful, please click Vote As Helpful.
How to Get Better Answers to Your Questions
P.S. My replies are not critical, but humble responses. :)- Edited by Nevin Janzen Monday, April 30, 2012 4:07 PM
-
Monday, April 30, 2012 3:50 PM
Although @servy42 is being a little aggressive and discriminatory of the moderation team, he does have a few good points and I have to agree with him on those points.
He just pointing facts that in all honesty should have been noticed days after said account was created; I'm sure Rudy and all the moderators here know how to take a feedback even if it's slightly bitter. :)
Eyal (http://shilony.net), Regards.
-
Monday, April 30, 2012 4:07 PM
Yeah :D, you're right. No harm done, @servy42!!
:)
Nevin Janzen (Visit my Website)
If this post answers your question, please click Propose As Answer. If this post is helpful, please click Vote As Helpful.
How to Get Better Answers to Your Questions
P.S. My replies are not critical, but humble responses. :)- Edited by Nevin Janzen Monday, April 30, 2012 4:07 PM
-
Monday, April 30, 2012 4:11 PM
The name is virtually identical, the account was created the day after the other account was banned, the writing style is the same, he's quoted posts from his banned account as if they were his own posts. I have said on several occasions, to him, that it's the same person and he has not bothered to deny it, he is being just as abusive, and in the same way, that the previous account was being abusive before it was banned, and if you can/have checked I'm sure that the IPs will indicate that it's the same person.
Apparently marking posts as answers and merging duplicate threads are a higher priority for the moderation team.
The issue will be dealt with in an appropriate fashion. What if it isn't the same person, but is really just a copycat impersonator. I am sure there are legal issues above my legal expertise to consider before you can take that irrevocable act of banning someone. Most all of the Forum Moderators do not fill the dual role of Forum Owner, who has the authority to ban someone.
Rudy =8^D
Mark the best replies as answers. "Fooling computers since 1971."
-
Monday, April 30, 2012 5:30 PM
- Not all bans need be permanent. Granted, if an account is ban-evading the ban-evading account ought to be permanently banned, but, generally speaking, that isn't the case.
- Why would a ban (even a permanent one) be irrevocable? That just seems like an inherently bad idea and issue with the forum software if that's the case. If a ban is made in error it should be able to be revoked. There should also be some sort of appeals process so that a banned member can make their case for why their ban should be revoked, shortened, or even just explained in the event that they didn't fully comprehend why what they did was ban-worthy.
- You guys own the forum. We, as members, do not have the RIGHT to be here, merely the privilege, therefore there are no legal issues when it comes to banning someone. You have the legal right to ban someone because you just felt like it, or because they were the 666,666 poster or whatever. You ought to ban people only when they have violated the forum rules in a manor severe enough to warrant a ban, but that's still not a legal issue.
- Even if it is a different person who's impersonating a banned member, they can't seriously complain if they're banned for pretending to ban evade. If nothing else, it's appropriate to ban then and let them appeal if it's the case. If it were my forum, I wouldn't reverse that on appeal even if they were just impersonating someone else, but in the event that you wouldn't they should still be initially banned even if it's not permanent. On top of that, the fact that the IP and other identifying information is likely the same will tell you that it's not just a copycat.
- As I've said before, this poster has done more than enough in his own right to warrant a ban, even if you didn't realize that it was a ban evading account.
- Even if you don't have the authority to ban this person yourself, you've had TWO WEEKS to get a hold of someone who is capable of banning him. A day would be too long, two or three is honestly unacceptable, and any more than that, given what the poster has been doing, and how blatantly obvious the rule violations are, is worthy of someone losing their position. There is no legitimate reason for this behavior to be continuing on for so long entirely unchecked. Not only is it possibly pushing away members from asking questions, but it's very possibly pushing away long time and very active forum answerers, and if you let that happen the forums will be substantially damaged. You cannot afford to let that happen, and on top of that to demonstrate that virtually no effort is being placed into dealing with the situation. It took WEEKS for the original account to be banned, and on the exact same day he just made a new account, with a name that clearly says that it's the same person, acts as if it's the same person, and continues doing exactly the same things that caused him to be banned. That's a major slap in the face to the moderation staff, and to simply ignore it and not take IMMEDIATE action is telling the entire community that you are incapable of managing your forums. It's something that when I've moderated a forum would never be tolerated. The most severe rule violation for me is ban evading, because nothing else you do matters one bit if you just let people make a new account the moment they're banned. For my forums having a ban evader survive for a few hours was failure, and in the majority of cases there is someone there to handle the situation and ban the poster (at least in a case like this when it's both obvious and disruptive) within minutes. And those were forums that were smaller than these, and possibly with a smaller moderation staff. Nonetheless there was almost always 1-2+ senior mods (with banning power) either online, or in a chat/IM client so that a moderator could contact them in the event of something like this happening.
- If banning the member is beyond your control, you should at least be deleting the posts that are obviously in severe violations of the rules. If you don't have the ability to do that then the title of moderator should really be changed, because it means nothing is actually being moderated by them.
Speaking as a senior moderator of a QA forum for several years, I can tell you it's really not all that hard. This is, from a moderation point of view, about as easy as it gets. If you can't handle this, then the administrators need to seriously reconsider their entire moderation strategy because it simply isn't working. The entire purpose is to prevent posts from being able to disrupt the community as a whole so that people can come and have their questions answered. When I see the difficult moderation issues not handled well I can and have held my tongue, after all I believe most of you are volunteers, not paid staff, but when the easiest of easy problems don't get solved I can no longer keep quiet.
YOU NEED TO FIX THIS. You cannot leave these forum entirely unmoderated. In addition to all of the problems being caused by this one poster, he's demonstrating to everyone else that there is virtually no moderation on these forums which will only invite others to continue to violate the rules as they will know that there are no negative consequences. It is a problem that will continue to feed itself until you eventually crack down and actually enforce the rules of these forums become less and less useful and everyone moves to other QA forums.
- Edited by servy42Microsoft Community Contributor Monday, April 30, 2012 5:50 PM
-
Monday, April 30, 2012 6:01 PMI agree with most of what you wrote, servy. Like I said earlier, I am sure there are legal issues. We cannot simply attribute the behavior of one screen name to another screen name just because it might be similar. I would expect that the new screen name would have to commit its' own set of crimes against forums.
Mark the best replies as answers. "Fooling computers since 1971."
-
Monday, April 30, 2012 6:38 PM
Why would there be legal issue? These are your forums. You can ban whoever you want for whatever reason you want (or not reason at all).
I gave you a laundry list of reasons for with you could ban the user, and for which you can show that he's a ban evading account. It's not just the name. If a new account was created with such a similar name but it didn't quite talk the same way, wasn't being abusive, was actually being somewhat helpful in answering questions, etc. then this would be an entirely different conversation. Then it would require looking at IPs, login times, email(s) associated with the accounts, password hashes, writing style, etc. As it is, there is so much evidence that there is no need to look deeply at those more involved mechanisms. As I've already said, he has posted the same abusive types of posts, using the same writing style, the same type of broken English, the same format/layout of posts, similar vocabulary, many of the same insults (also violations of the rules of the ban evading account in it's own right), etc. Also, as I said before, he referred to quotes of his previous posts as if they were his, and he has not disputed the fact that he's ban evading when I've accused him of it (I intentionally did this right away to make it that much easier on you and he took the bait, not that it matters it now seems).
Ban evading IS a crime against the forum. If it's not, you need to fix that ASAP because if it's not considered a violation, or it's not enforced, then nobody, every, has anything to fear from breaking the rules. No matter what they ever do they can always just create a new account.
In addition to ban evading, he has made many insulting posts (in fact there are only a few of his posts that don't have insults I would consider a violation of the rules. Most of his posts are offtopic, again, there are only a few of his posts that I can find that are on topic enough to not be considered rule violation.
This is why I say it's such an easy case. I don't even need to try hard at all to argue the case here. I spent over 4 years as moderator/administrator of an online game in which one of the primary rules to be investigated/appealed was multiple accounts. I consider myself an expert in the field of determining if two accounts to a browser based interactive site are actually the same person in a field of not-that-many people. I am literally a professional in the field; I was on the paid staff for 3 of those four years. If this was actually a hard case I could give you all sorts of advise about how to demonstrate that accounts were actually the same person, but there just is no need here. This is the simplest of simple, as I've said.
I have seen some very, very smart rule breakers. I've seen people that are very apt at hiding the fact that two or more accounts are actually the same person, and then not only determining that it's the case, but proving it with enough certainty to take action is even more difficult against a sufficiently smart and determined rule breaker. Here the poster isn't even trying to hide the fact that it's the same person. He didn't even change his name. This means that wants us to know that it's the same person.
-
Tuesday, May 01, 2012 8:07 AM
The posts are full of offensive, irrelevant content that within each post he makes reduces the overall quality of these forums.
I don't mind whether you will ban him but please, for the love of these forums just delete his posts!
Eyal (http://shilony.net), Regards.
-
Tuesday, May 01, 2012 9:19 AM
I'm not contributing to this community to get stars, I'm doing that on my free time because I love to help the people.
I don't mind the curses but don't forget to open the dictionary and query for the verb "offend" before you're telling people that they offended you.
You barely manage to communicate and behave socially, not to mention that any reasonable explanation that was given to you was subjectively disprove by your ego and you want us to reason with you ?
I couldn't care less what you write, I'm definitely not playing with you.
Eyal (http://shilony.net), Regards.
-
Tuesday, May 01, 2012 1:16 PMOh, Rudedog, one more thing to add to the list of things that he's done. Re-posting material deleted by a moderator. That's another easy unambiguous violation of the rules that is simply not disputable. If it was deleted before it was already determined to be in violation of the rules, so knowingly posting that same material again means is another slap in the face of the moderation and is something that ought to be handled immediately and without hesitation.
-
Tuesday, May 01, 2012 1:21 PM
I'm not contributing to this community to get stars, I'm doing that on my free time because I love to help the people.
I don't mind the curses but don't forget to open the dictionary and query for the verb "offend" before you're telling people that they offended you.
You barely manage to communicate and behave socially, not to mention that any reasonable explanation that was given to you was subjectively disprove by your ego and you want us to reason with you ?
I couldn't care less what you write, I'm definitely not playing with you.
You really need to stop talking with him Eyal. The only reason he's here is to get a rise out of you, and regardless of what you say or how you say it responding prolongs the conversation. It's not like you're going to get him to realize the error of his ways and give up.
On any other forum I'd say let the moderators handle it, but even though these forums aren't moderated the best solution is still to ignore him. Eventually he'll get bored, and if not, you're more likely to make it worse talking to him than not.
If you're worried about the anonymous readers thinking his points are valid, at this point it's pretty obvious to anyone even skimming his posts that he's not here to be helpful or to discuss technical topics, so in my mind that risk is rather small.
-
Tuesday, May 01, 2012 1:30 PMYeah, you're right, I won't do it again.
Eyal (http://shilony.net), Regards.